【问题标题】:How to grab a value from a dictionary which contains multiple keys? [duplicate]如何从包含多个键的字典中获取值? [复制]
【发布时间】:2019-06-02 10:11:03
【问题描述】:

我有这本词典:

 mydict = {'950001,959070,959071,959072,950908,959073': 'value1', '400856,400857,400858,400859,400860,400861': 'value2', '920100': 'value3', '950107,950109,950108': 'value4'}

我的问题是,我如何通过仅使用其中一个键(例如 950001)来获得价值 value1

换句话说,我想做这样的事情:

mydict['950001']

然后打印出来:

value1

我知道我可以反转键和值,但在这种情况下,它不适用于我正在处理的脚本。

【问题讨论】:

  • 从技术上讲,950001 不是密钥,'950001,959070,959071,959072,950908,959073' 是。您希望重新创建字典,并使用每个逗号分隔的 int 作为键。
  • 您的字典没有多个键。您必须搜索键才能找到与线性搜索匹配的键

标签: python dictionary


【解决方案1】:

Python 中的字典由键值对组成。因此,在您的示例中,one 键将是 '950001,959070,959071,959072,950908,959073'。在下面的解释中,我将调用950001959070 等等只是“数字”。


方法 1: 您可以在 dict 的所有键上编写一个循环,并将每个键拆分为一个列表,在每个逗号 ,str.split 处。然后您的列表包含您的号码,您可以检查您请求的号码n 是否在其中:

mydict = {'950001,959070,959071,959072,950908,959073': 'value1', '400856,400857,400858,400859,400860,400861': 'value2', '920100': 'value3', '950107,950109,950108': 'value4'}

n = '950001'
for key in mydict:
    if n in key.split(','):
        print(mydict[key])

哪些打印:

value1

方法 2: 或者,您可以将字典 mydict 转换为新字典 new_dict,这样每个数字都有自己的键:

mydict = {'950001,959070,959071,959072,950908,959073': 'value1', '400856,400857,400858,400859,400860,400861': 'value2', '920100': 'value3', '950107,950109,950108': 'value4'}

new_dict = {}
for key in mydict:
    for new_key in key.split(','):
        new_dict[new_key] = mydict[key]

print(new_dict)

哪些打印:

{'950001': 'value1', '959070': 'value1', '959071': 'value1', '959072': 'value1', '950908': 'value1', '959073': 'value1', '400856': 'value2', '400857': 'value2', '400858': 'value2', '400859': 'value2', '400860': 'value2', '400861': 'value2', '920100': 'value3', '950107': 'value4', '950109': 'value4', '950108': 'value4'}

然后你就可以像new_dict['950001']所说的那样访问你的值了。


上面的代码强调清晰。根据您的用例,您可以编写一个函数和/或使用 dict comprehension 让您的代码看起来更漂亮(如果您对此感到满意):

mydict = {'950001,959070,959071,959072,950908,959073': 'value1', '400856,400857,400858,400859,400860,400861': 'value2', '920100': 'value3', '950107,950109,950108': 'value4'}
new_dict = {nk: v for k, v in mydict.items() for nk in k.split(',')}
print(new_dict['950001'])

【讨论】:

  • 不需要拆分
  • 如果相同的数字出现在多个键中,请注意替代解决方案只会显示其中一个值
  • 如果你不拆分它们,你就没有把你的字典当作字典,你把它当作一个列表来使用。
【解决方案2】:
def get_value(n):
    newdict = {
        "value1": ["950001", "959070", "959071", "959072", "950908", "959073"],
        "value2": ["400856", "400857", "400858", "400859", "400860", "400861"],
        "value3": ["920100"],
        "value4": ["950107", "950109", "950108"]
    }
    # Loop through dictionary to find a match and its value
    for value, nums in newdict.items():
        if n in nums:
            return(value)

【讨论】:

  • 解决方案应该泛化到任何键和值。通常这个例子只是为了说明问题
  • 为了澄清@Untitled123 所说的,这些值不一定是唯一的。
猜你喜欢
  • 1970-01-01
  • 2022-01-05
  • 2012-05-09
  • 2016-06-24
  • 2012-12-18
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 2021-09-03
相关资源
最近更新 更多