W Pythonie chcę utworzyć słownik przy użyciu zrozumienia za pomocą klawiszy, które są ciążem, a wartości, które są listami. Czego nie mogę się dowiedzieć, jest jak dołączać elementy do tych list. Na przykład rozważ moją następującą próbę:

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

G16.Nodes (dane = true) podają listę par, w których pierwszy element jest łańcuchem, a drugi element jest słownikiem, który właśnie określa kolor. Jak stwierdzono, chcę wykonać tę strukturę w słownik, gdzie klucze podają kolor, a wartości są listami ciągów, które mają ten kolor.

Jeśli masz rozwiązanie lub jeśli jest lepszy sposób, aby to zrobić, daj mi znać!

Dzięki za wszelką pomoc.

1
CodeKingPlusPlus 20 listopad 2013, 10:37

2 odpowiedzi

Najlepsza odpowiedź

Próbujesz to zrobić:

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

Ale nie jest to bardzo wydajne, gdy pętlasz nad g16.nodes(data=True) raz na każdy kolor

Coś takiego jest lepsze

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])

Jeśli znasz k jest zawsze w colors, możesz uprościć

d = {c: [] for c in colors}
for x in g16.nodes(data=True):
    d[x[1]['color']].append(x[0])
3
John La Rooy 20 listopad 2013, 06:46

Korzystając ze zrozumienia dla słownika klucza do list, nie będzie ładny. Prawdopodobnie łatwiej jest, jeśli spróbujesz tego:

Zakładając, że g16.nodes(data=True) jest czymś podobnym

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

I klucz color istnieje, możesz spróbować tego:

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)
0
Reservedegotist 20 listopad 2013, 07:05