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 回答
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

于 2013-11-08T19:07:45.320 回答