在Python字典中如何根据键的第一个值找到一个?

时间:2016-11-19 17:35:41

标签: python python-2.7 dictionary key-value-store

我正在使用python字典来存储键值对。我有重复键,例如键6有值[4,2], [5,1],我不能存储在字典中,因为它不允许重复键。

因此,我提出索引密钥本身,例如对于键7,有3个值,所以我用索引存储它们:

{(7, 0): [6, 1], (7, 1): [5, 2], (7, 2): [4, 3]}

基于上述逻辑,我生成了以下字典:

{
(7, 0): [6, 1], 
(7, 1): [5, 2], 
(7, 2): [4, 3],

(6, 1): [4, 2], 
(6, 0): [5, 1], 

(5, 0): [4, 1], 
(5, 1): [3, 2], 

(3, 0): [2, 1], 

(4, 0): [3, 1]
}

我的问题是如何找到给定密钥的一组值,例如对于密钥7,我希望得到[6,1], [5,2], [4,3]的结果。

PS:解决方案只能使用python2.7标准库。

感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

你制作字典的方法并不好。您应该创建一个dict,将所有项目的值保存为list,而不是这样做。

因此,您的字典结构应该是:

my_dict = {
    7: [[6, 1], [5, 2], [4, 3]],
...
}

然后,您只需访问7的所有值:

my_dict[7]

看看collections.defaultdict

如果您仍想使用自己的方法,可以使用 list comprehension 来获取值:

key = 7

[v for k , v in my_dict.items() if k[0]==key]
#                                   ^  matches 0th index of key and returns
#                                      returns all the values as list     

答案 1 :(得分:2)

您的回答:

print([v for k,v in d.items() if k[0]==7])

结果:

[[6, 1], [5, 2], [4, 3]]

但你没有利用字典。对于您的任务,我建议collections.defaultdictlist作为默认参数

演示:

import collections

d = collections.defaultdict(list)

d[7].append([6,1])
d[7].append([5,2])
d[7].append([4,3])

print(d[7])

结果:

[[6, 1], [5, 2], [4, 3]]

答案 2 :(得分:1)

我实际上会改变你的字典的结构,使其成为一个字典,其中包含键的数字(即你在这里谈论的6和7),然后列出值的元组。像这样:

{7: [(6, 1), (5, 2), (4, 3)], 6: ... }

如果您愿意,也可以列出一份清单。

答案 3 :(得分:0)

所以我尝试做这样的事情。这可以解决你的问题吗?

for key in dict:
    for val in key:
        if val == 7:
            print 'yes'