繁体   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