2016-05-25 4 views
0

sagen wir, ich habe eine Liste wie dieseSuche bestimmte Tupel in der Liste und Wörterbücher

liste=[(0,1,45), (0,2,90), (0,3,60), (1,2,50), (1,3,20), (2,3,25)] 

und eine weitere Liste wie folgt aus: number_list=(0,2)

so jetzt, würde ich ein Wörterbuch haben möchten (oder eine Liste die Liste meiner Tupel liste,), in denen ich für jeden Schlüssel haben, enthält diese Tupel, die die Zahlen in number_list

auf meinem exemple, was ich will, ist:

d= { '0' : [(0,1,45), (0,2,90), (0,3,60)], '1' : [(1,2,50), (2,3,25)] } 

Bisher habe ich dies geschrieben:

d={} 
for x in range(len(number_list)): 
     d[format(x)]=[item for item in liste if number_list[x] in item] 
print d 

aber es wird nicht funktionieren, und ich kann nicht verstehen, warum?

Danke

+3

meinst du nicht "2": 'statt' '1': '? oder ist es der Index? – njzk2

+0

'es wird nicht funktionieren' funktioniert hier (obwohl die Ausgabe ein wenig anders ist, weil' 2' auch in '(0, 2, 90)') – njzk2

+0

Scheint ungefähr richtig, Sie müssen genauer beschreiben, was 'gewonnen' t work 'bedeutet - der Unterschied zwischen dem, was tatsächlich passiert ist und dem, was Sie erwartet haben. – pvg

Antwort

1

Sie ein Wörterbuch Verständnis verwenden:

>>> liste=[(0,1,45), (0,2,90), (0,3,60), (1,2,50), (1,3,20), (2,3,25)] 
>>> number_list=(0,2) 
>>> d = {str(x):[item for item in liste if x in item] for x in number_list} 
>>> d 
{'0': [(0, 1, 45), (0, 2, 90), (0, 3, 60)], '2': [(0, 2, 90), (1, 2, 50), (2, 3, 25)]} 

Auch - beachten Sie, dass die Schlüssel in einem Wörterbuch nicht brauchen, um Strings zu sein. Sie könnten einfach die Zahlen selbst als Schlüssel verwenden, was natürlicher sein könnte.

Verwandte Themen