2015-12-08 17 views
2

我已經列出了,如何將所有值轉換列表中的成詞典的按鍵在Py2.7

lists=[ ['arya','egg','milk','butter','bread'], 
     ['Jon','butter','pastrie','yogurt','beer'], 
     ['bran','beer','milk','banana','apples'],] 

每個列表中有值,其中第一值是一個人的名字,其餘的都是一些食物。

我已經在那裏我已經創建具有這些食品作爲鍵和人的價值字典的任務,如下圖所示

dict = { 'egg' : set(['arya']), 
      'milk': set(['arya','bran']), 
      'butter' : set(['arya','jon']), 
      'bread' : set(['arya']), 
      'pastrie' : set(['jon']), 
       'milk' : set(['bran']) 
      }       # few keys omitted 


這是我做的,並停了下來,不知道如何進一步進行,

food,person = [],[] 

for i in lists: 
    food.append(i[1:]) 
    person.append(i[0]) 

我能單獨每個列表的第一個值,並將其添加到列表 與食物一樣。 不知道如何進一步進行。 開始學習python,任何輸入都非常有幫助。請分享一兩行解釋來啓迪這個新手!

非常感謝。

回答

1

使用字典方法setdefault在這裏很有幫助。

您當然不需要將切片設置爲變量,但它使得它更易於閱讀。

d = {} 
for l in lists: 
    name = l[0] 
    items = l[1:] 
    for item in items: 
     d.setdefault(item, set()).add(name) 
1

使用collections.defaultdict

lists = [['arya', 'egg', 'milk', 'butter', 'bread'], 
    ['Jon', 'butter', 'pastrie', 'yogurt', 'beer'], 
    ['bran', 'beer', 'milk', 'banana', 'apples']] 

from collections import defaultdict 

d = defaultdict(set) 
for sub in lists: 
    for v in sub[1:]: 
     d[v].add(sub[0]) 


print(d) 

輸出:

defaultdict(<class 'set'>, 
{'bread': {'arya'}, 'yogurt': {'Jon'}, 'beer': {'Jon', 'bran'}, 
'banana': {'bran'}, 'butter': {'Jon', 'arya'}, 'milk': {'arya', 
'bran'}, 'pastrie': {'Jon'}, 'egg': {'arya'}, 'apples': {'bran'}}) 

對於python3語法是一個更好一點:

from collections import defaultdict 

d = defaultdict(set) 
for name, *rest in lists: 
    for v in rest: 
     d[v].add(name) 
相關問題