0

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

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

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

4

3 回答 3

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相同的功能

为了使这更容易,集合模块有一个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}})
于 2013-11-09T01:58:46.783 回答
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

这将处理重复的键,而不是覆盖键,它会将一些东西附加到该值列表中。

于 2013-11-09T02:05:05.170 回答
0

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

例如:

  • 不要使用个人地址作为唯一键,因为可能有几个人住在那里。
  • 一个人的社会安全号码或驾驶执照是一个人更好的唯一 ID。
  • 您可以创建自己的 id 来强制它是唯一的。
于 2013-11-09T02:26:08.650 回答