2017-08-23 129 views
-2

我是python新手。我有一個嵌套字典,如(k1,(t1,v1))。我想循環遍歷每個v1值。有效地迭代嵌套的Python字典

因此,讓我說我的字典是my_dict。我想用兩個for循環有效地訪問k,x,y,使用扁平化器或字典理解。請讓我知道最佳做法。

 for k, v in my_dict.iteritems(): 
     inner_dict = my_dict.get(k) 
     for x, y in inner_dict.iteritems(): 
      print(k, x , y) 
+0

for for循環很好。什麼是扁平化劑? –

+1

你不需要'inner_dict = my_dict.get(k)'。你已經有'v'。 – khelwood

+1

爲什麼使用'inner_dict = my_dict.get(k)'如果你可以迭代'v.iteritems()'而不是? – MSeifert

回答

3

有沒有需要循環的項目,如果你只值感興趣:

flattened_values = (v for dct in my_dict.itervalues() for v in dct.itervalues()) 
for value in flattened_values: 
    print(value) 

編輯:根據您的編輯你需要的鍵以及

。在這種情況下,除了多餘的inner_dict = my_dict.get(k)之外,您的代碼很好,基本上只有v。對於相同的單行內容如下所示:

for v in ((k1, k2, v2) for k1, v1 in my_dict.iteritems() for k2, v2 in v1.iteritems()): 
    print(v) 
+1

不確定是否應將「next(dct.itervalues())」視爲「最佳實踐」。 – MSeifert

+0

@ MSeifert好點。更新。 –

+0

IMO,我認爲在OP中嵌套* for *版本仍然更好,除了它們應該在兩個循環中使用'.itervalues'。 –