0

我想做的很简单:

collection = {'a':[], 'b':[], 'c':[]}
values = [1,2,3]

我想制作一个产生以下内容的函数:(将值附加到字典的列表元素中,dic和 的list长度相同)

{'a':[1], 'b':[2], 'c':[3]}

这很简单,我可以使用几个 for x in. 但我想在一行中做到这一点。(在同一行中使用两个循环)并且我无法使语法正常工作。

我尝试了一些类似的事情,但它们都导致语法错误:

collection[c].append(value), for c in d.iteritems(), for value in values
4

1 回答 1

2

你不能在一条线上做你想做的事。您可以在一行上创建一个新字典:

{k: collection[k] + [v] for k, v in zip(collection.keys(), values)}

结果:

>>> collection = {'a':[], 'b':[], 'c':[]}
>>> values = [1,2,3]
>>> {k: collection[k] + [v] for k, v in zip(collection.keys(), values)}
{'a': [1], 'c': [2], 'b': [3]}

这称为dict 理解。就像列表推导和生成器表达式一样,您可以在其中一个中使用多个循环,但这里不需要一个。会将键 from与 中的整数zip()配对。collectionvalues

dict就地修改,您必须至少使用 2 行:

for k, v in zip(collection.keys(), values):
    collection[k].append(v)

Python 确实接受了这一点,但这与我可以为您查找的几乎所有样式指南背道而驰:

for k, v in zip(collection.keys(), values): collection[k].append(v)

Python 会引发语法错误,因为它将您的行解释为表达式的元组(逗号使其成为元组),并且您的两个表达式是for语句,不能在表达式中使用。

于 2012-11-26T08:33:18.383 回答