簡體   English   中英

具有相同鍵名的字典

[英]Dict with same keys names

我需要一個具有兩個名稱相同但值不同的鍵的字典。 我嘗試執行此操作的一種方法是創建一個類,在該類中放置字典的每個鍵名稱,以使它們成為不同的對象:

names = ["1", "1"]
values = [[1, 2, 3], [4, 5, 6]]
dict = {}

class Sets(object):
    def __init__(self,name):
        self.name = name

for i in range(len(names)):
    dict[Sets(names[i])] = values[i]

print dict

我期望的結果是:

{"1": [1, 2, 3], "1": [4, 5, 6]}

而是:

{"1": [4, 5, 6]}

[編輯]因此,我發現字典中的鍵是唯一的,具有兩個名稱相同的鍵是對字典的錯誤使用。 因此,我需要重新考慮我的問題,並使用Python中可用的其他方法。

字典是不可能做到的。 實際上,這與字典背后的整個思想背道而馳。

同樣,您的Sets類也無濟於事,因為它會有效地給每個名稱一個新的(某種隨機的)哈希碼,這使得從字典中檢索項目變得很困難,除了檢查所有項目之外,這違背了字典 您不能執行dict.get(Sets(some_name)) ,因為這將創建一個新的 Sets對象,其哈希碼與詞典中已有的哈希碼不同

您可以做的是:

  1. 只需創建(name, value)對的列表即可,或者

     pairs = zip(names, values) # or list(zip(...)) in Python 3 
  2. 創建一個將名稱映射到值列表的字典。

     dictionary = {} for n, v in zip(names, values): dictionary.setdefault(n, []).append(v) 

第一種方法使用元組列表,將具有線性查找時間(您基本上必須檢查所有條目),但是第二種方法是將dict映射到列表,它與“多鍵字典”盡可能地接近。 ”,應該很好地滿足您的目的。 要訪問每個鍵的值,請執行以下操作:

for key, values in dictionary.iteritems():
    for value in values:
        print key, value

您可以不想讓每個鍵具有多個值,而不是想要多個具有相同名稱的鍵?

names = [1]
values = [[1, 2, 3], [4, 5, 6]]

dict = {}

for i in names:
    dict[i] = values

for k,v in dict.items():
    for v in dict[k]:
        print("key: {} :: v: {}".format(k, v))

輸出:

key: 1 :: v: [1, 2, 3]
key: 1 :: v: [4, 5, 6]

然后,您可以這樣訪問每個值(或循環訪問):

print("Key 1 value 1: {}".format(dict[1][0]))
print("Key 1 value 2: {}".format(dict[1][1]))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM