在python中迭代字典上的操作

在python中迭代字典上的操作,python,dictionary,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

我有一本字典,看起来像:

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新手(正如您所知)。有人能帮我纠正一下吗?

你可以使用字典和列表:

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]}
如果您使用的是Python2,则可能需要使用
result.iteritems()
来实现更高效的循环

你的循环快到了,你只是忘了分配回字典:

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

您的解决方案存在的问题是,您从未将列表理解分配给新dict中的键。您需要将解决方案更改为以下内容:

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

Martijn Pieters的答案使用字典理解法,简洁明了。有关dict理解的更多信息,请参阅。

我已将您的示例词典编辑为有效的python;你能核实一下这是你所拥有的吗?谢谢马丁,这本字典是有效的,我已经在其他操作中使用过它了,但是我在这里放了一个错误的简略版本。谢谢你纠正它!这太完美了。我会在一分钟内接受!虽然我必须学习它才能理解它,但它是有效的!我删除了我的答案-我读错了问题。Martijn正确使用嵌套循环。