在python中迭代字典上的操作

时间:2013-11-08 18:58:31

标签: python dictionary

我有一个类似的字典:

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的新手(正如你所知)。任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分: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 != '']

答案 1 :(得分:1)

您的解决方案的问题在于您永远不会将列表理解分配给新词典中的键。您需要将解决方案更改为:

new_dict = {}
for key, value in result.items():
    new_dict[key] = [item for item in value if item != '']
print(new_dict)
Martijn Pieters的答案使用字典理解,简洁而又Pythonic。有关dict理解的更多信息,请参阅http://docs.python.org/2/tutorial/datastructures.html#dictionaries