2013-07-12 98 views
1

我不知道這是否已經被問過,因爲我也不知道如何字呢:如何得到一個值的值作爲字典的關鍵

因此,例如,我有一個給定字典用的鍵和值:

d = {[ 0 : 1, 2, 3], [1 : 2, 3, 4], [2: 5, 6, 7]} 

,我想表明,1是一個關鍵的,並且也是值,從而得到該 0被連接到1,例如[0的值的結論: [2,3,4],2,3]或類似的東西。

而且我會這樣做的大量的鍵,每個鍵都有多個值。

這可能嗎?我將如何編碼?順便說一句,我對Python非常陌生,所以請對我輕鬆一點。

回答

0

你的意思是這樣的嗎?

d = { 0 : (1, 2, 3) , 1 : (2, 3, 4), 2: (5, 6, 7)} 
for key in d.keys(): 
    for val in d[key]: 
     try: 
      d[key]+=d[val] 
     except KeyError: 
      pass 

>>> d 
{0: (1, 2, 3, 2, 3, 4, 5, 6, 7), 1: (2, 3, 4, 5, 6, 7), 2: (5, 6, 7)} 

如果你想唯一值,然後添加d[key] = tuple(set(d[key]))for key in d.keys()循環的結束。

>>> d 
{0: (1, 2, 3, 4, 5, 6, 7), 1: (2, 3, 4, 5, 6, 7), 2: (5, 6, 7)} 

PS:d = {[ 0 : 1, 2, 3], [1 : 2, 3, 4], [2: 5, 6, 7]}是無效的蟒蛇!

編輯:看評論。

d = { 0 : [1, 2, 3] , 1 : [2, 3, 4], 2: [5, 6, 7]} 
for key in d.keys(): 
    orig_vals=d[key] 
    new_vals=[] 
    for val in orig_vals: 
     try: 
      new_vals+=d[val] 
     except KeyError: 
      pass 
    d[key] = list(set(new_vals)-set(orig_vals)) 

>>> d 
{0: [4, 5, 6, 7], 1: [5, 6, 7], 2: []} 

如果你想避免清理了未與其他鍵的值,例如[5,6,7] 2,然後最後一行改爲

if new_vals: 
     d[key] = list(set(new_vals)-set(orig_vals)) 

這給

>>> d 
{0: [4, 5, 6, 7], 1: [5, 6, 7], 2: [5, 6, 7]} 

編輯2:看評論。

d = { 0 : [1, 2, 3] , 1 : [2, 3, 4], 2: [5, 6, 7]} 
for key in d.keys(): 
    orig_vals=d[key] 
    new_vals=[] 
    count = 0 
    for val in orig_vals: 
     try: 
      new_vals+=d[val] 
      count+=1 
      if count >= yournumberhere: break 
     except KeyError: 
      pass 
    d[key] = list(set(new_vals)-set(orig_vals)) 
+0

哦,是謝謝!這絕對是我想要做的事情!是的,我剛剛意識到自己在字典上的錯誤,也感謝你指出了這一點。是否也可以改變鍵的值,使它只是值的值? (這個術語是相當混亂哈哈) – James

+0

我不明白,你的價值觀是什麼意思?每個值有多個鍵? – seth

+0

哦,你的意思是把'd [key]'的賦值改爲'd [val]'的賦值嗎?例如'0:(1,2,3)'會轉到'0:(2,3,4,5,6,7)',或者轉到'0:[(2,3,4),(5, 6,7)]'? – seth

0
d = {[ 0 : 1, 2, 3], [1 : 2, 3, 4], [2: 5, 6, 7]} this is not a valis dictionary 

It will be like this: 

d={0: [1, 2, 3], 1: [2, 3, 4], 2: [5, 6, 7]} 
arr=[] 
for val in d.values(): 
     arr.extend(val) 



arr = [1, 2, 3, 2, 3, 4, 5, 6, 7] 

values=set(arr) #removeing repeted element from the list 
value = [1, 2, 3, 4, 5, 6, 7] 

result = [key for key in d.keys() if key in values] #will return the result 
result = [1, 2] 

here result = [1,2] so,1 and 2 is a key and also a vaule 
相關問題