你怎么能得到一个python字典让重复键保存值?

时间:2013-11-09 01:55:00

标签: python dictionary

我正在完成一项任务。无论如何,字典可以有重复的键并保持相同或不同的值。这是我正在尝试做的一个例子:

dict = {
        'Key1' : 'Helo', 'World'
        'Key1' : 'Helo'
        'Key1' : 'Helo', 'World'
       }

我尝试过这样做但是当我将任何值与key1相关联时,它会被添加到同一个key1中。 这可能用字典吗?如果不是我可以用什么其他数据结构来实现这个过程?

3 个答案:

答案 0 :(得分:3)

使用列表字典来保存多个值。

将一个键赋予多个值的一种方法是使用列表字典。

x = { 'Key1' : ['Hello', 'World'],
      'Key2' : ['Howdy', 'Neighbor'],
      'Key3' : ['Hey',   'Dude']
    }

要获取所需的列表(或创建一个新列表),我建议使用setdefault。

my_list = x.setdefault(key, [])

示例:

>>> x = {}
>>> x['abc'] = [1,2,3,4]
>>> x
{'abc': [1, 2, 3, 4]}
>>> x.setdefault('xyz', [])
[]
>>> x.setdefault('abc', [])
[1, 2, 3, 4]
>>> x
{'xyz': [], 'abc': [1, 2, 3, 4]}

使用defaultdict获得相同的功能

为了简化这一过程,collections module有一个defaultdict对象,可以简化此操作。只需传递一个构造函数/工厂。

from collections import defaultdict
x = defaultdict(list)
x['key1'].append(12)
x['key1'].append(13)

您还可以使用词典词典甚至词典词典。

>>> from collections import defaultdict
>>> dd = defaultdict(dict)
>>> dd
defaultdict(<type 'dict'>, {})
>>> dd['x']['a'] = 23
>>> dd
defaultdict(<type 'dict'>, {'x': {'a': 23}})
>>> dd['x']['b'] = 46
>>> dd['y']['a'] = 12
>>> dd
defaultdict(<type 'dict'>, {'y': {'a': 12}, 'x': {'a': 23, 'b': 46}})

答案 1 :(得分:0)

我想你想要collections.defaultdict

from collections import defaultdict
d = defaultdict(list)
list_of_values = [['Hello', 'World'], 'Hello', ['Hello', 'World']]
for v in list_of_values:
    d['Key1'].append(v)

print d

这将处理重复的键,而不是覆盖键,它将附加到该值列表。

答案 2 :(得分:0)

密钥对数据是唯一的。考虑为密钥使用其他值或考虑使用不同的数据结构来保存此数据。

例如:

  • 不要使用人员地址作为唯一密钥,因为有些人可能住在那里。
  • 一个人的社会安全号码或驾驶执照是一个人更好的独特身份。
  • 您可以创建自己的ID以强制它是唯一的。