在 Python 字典中如何根据键的第一个值找到一个?
In Python dictionary how to find a based on first value of the key?
我正在使用 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 标准库。
感谢您的帮助。
您创建字典的方法不好。而不是这样做,您应该创建一个字典,将所有项目的值保存为 list
。
因此,您的字典结构应如下所示:
my_dict = {
7: [[6, 1], [5, 2], [4, 3]],
...
}
然后您可以简单地访问 7
的所有值:
my_dict[7]
如果您仍想采用您的方法,您可以使用列表理解来获取值,如下所示:
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
我实际上会稍微改变一下你的字典的结构,使它成为一个字典,其中包含键的数字(即你在这里谈论的 6 和 7),然后是值的元组列表。像这样:
{7: [(6, 1), (5, 2), (4, 3)], 6: ... }
如果需要,您还可以有一个列表列表。
您的回答:
print([v for k,v in d.items() if k[0]==7])
结果:
[[6, 1], [5, 2], [4, 3]]
但你没有利用字典。对于您的任务,我建议 collections.defaultdict
和 list
作为默认参数
演示:
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]]
所以我尝试做这样的事情。这能解决您的问题吗?
for key in dict:
for val in key:
if val == 7:
print 'yes'
我正在使用 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 标准库。
感谢您的帮助。
您创建字典的方法不好。而不是这样做,您应该创建一个字典,将所有项目的值保存为 list
。
因此,您的字典结构应如下所示:
my_dict = {
7: [[6, 1], [5, 2], [4, 3]],
...
}
然后您可以简单地访问 7
的所有值:
my_dict[7]
如果您仍想采用您的方法,您可以使用列表理解来获取值,如下所示:
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
我实际上会稍微改变一下你的字典的结构,使它成为一个字典,其中包含键的数字(即你在这里谈论的 6 和 7),然后是值的元组列表。像这样:
{7: [(6, 1), (5, 2), (4, 3)], 6: ... }
如果需要,您还可以有一个列表列表。
您的回答:
print([v for k,v in d.items() if k[0]==7])
结果:
[[6, 1], [5, 2], [4, 3]]
但你没有利用字典。对于您的任务,我建议 collections.defaultdict
和 list
作为默认参数
演示:
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]]
所以我尝试做这样的事情。这能解决您的问题吗?
for key in dict:
for val in key:
if val == 7:
print 'yes'