1

在 python 中,我希望使用带有字符串键和列表值的理解来创建字典。我无法弄清楚的是如何将元素附加到这些列表中。例如考虑我的以下尝试:

{c: [].append(x[0]) for x in g16.nodes(data=True) for c in colors if x[1]['color'] == c}

g16.nodes(data=True) 给出一个对列表,其中第一个元素是字符串,第二个元素是只指定颜色的字典。如前所述,我希望将这个结构变成一个字典,其中键给出颜色,值是具有这种颜色的字符串列表。

如果您有解决方案,或者有更好的方法可以做到这一点,请告诉我!

感谢所有的帮助。

4

2 回答 2

3

您正在尝试这样做:

{c: [x[0] for x in g16.nodes(data=True) if x[1]['color'] == c] for c in colors}

但这不是很有效,因为您g16.nodes(data=True)为每种颜色循环一次

像这样的东西更好

d = {c: [] for c in colors}
for x in g16.nodes(data=True):
    k = x[1]['color']
    if k in d:
        d[k].append(x[0])

如果你知道k总是在colors,你可以简化为

d = {c: [] for c in colors}
for x in g16.nodes(data=True):
    d[x[1]['color']].append(x[0])
于 2013-11-20T06:46:10.433 回答
0

使用对列表键字典的理解不会很漂亮。如果你可以试试这个可能会更容易:

假设g16.nodes(data=True)是这样的

[('key1', {'color': 'black'}), ('key2', {'color': 'green')]

并且color密钥存在,你可以试试这个:

from collections import defaultdict
gen = ((k, c['color']) for k, c in g16.nodes(data=True) if c['color'] in colors)
results = defaultdict(list)
for key, color in gen:
    results[color].append(key)
于 2013-11-20T07:05:26.737 回答