1

次のような辞書があります。

result = {
    'mary': [1, 2, 3, ''],
    'anna': [7, 9, 8],
    'liz': [2, 1, '', ''],
}

''すべてのアイテムからすべてを削除し、新しいバージョンの辞書を保存したい。私はこれを試しています:

token = ()
for key, value in sorted(result.items()):
         token = (key, [item for item in value if item])
print(token)

ただし、辞書を一度だけ実行し、最初の行だけを返します。これは非常に基本的なことですが、私は Python を初めて使用します (おわかりのように)。誰かがそれを修正する方法について私を助けてくれますか?

4

2 に答える 2

1

辞書とリスト内包表記を組み合わせて使用​​できます。

result = {key: [v for v in value if v != ''] for key, value in result.items()}

これにより、各キーと値がコピーされた新しい辞書が作成されますが、空の文字列ではない値のみが含まれるように値がフィルター処理されます。

>>> result = {
...     'mary': [1, 2, 3, ''],
...     'anna': [7, 9, 8],
...     'liz': [2, 1, '', ''],
... }
>>> {key: [v for v in value if v != ''] for key, value in result.items()}
{'liz': [2, 1], 'mary': [1, 2, 3], 'anna': [7, 9, 8]}

Python 2 を使用している場合はresult.iteritems()、より効率的なループのために代わりに使用することをお勧めします。

あなたのループはほとんどそこにありました.辞書に代入するのを忘れただけです:

for key, value in result.items():
   result[key] = [v for v in value if v != '']
于 2013-11-08T19:04:17.840 に答える