在字典中查找字典的值

时间:2017-05-31 19:24:00

标签: python dictionary

我有一些这样的数据:

{'cities': [{'abbrev': 'NY', 'name': 'New York'}, {'abbrev': 'BO', 'name': 'Boston'}]}

根据我对Python的稀缺知识,这看起来像字典中的字典。

但无论哪种方式,我如何使用" NY"作为获取价值的关键"纽约"?

4 个答案:

答案 0 :(得分:3)

如果您的数据集不适合您的需要,而不是“按原样”使用它,您可以使用字典理解来创建另一个字典,使用键/值作为子字典的值,使用固定键。

d = {'cities': [{'abbrev': 'NY', 'name': 'New York'}, {'abbrev': 'BO', 'name': 'Boston'}]}
newd = {sd["abbrev"]:sd["name"] for sd in d['cities']}
print(newd)

结果:

{'NY': 'New York', 'BO': 'Boston'}

当然:print(newd['NY'])会产生New York

构建字典后,您可以根据需要多次重复使用它,并且查找速度很快。在需要时从原始数据集构建其他专用词典。

答案 1 :(得分:3)

这是一个包含一个键值对的字典。该值是一个词典列表。

d = {'cities': [{'abbrev': 'NY', 'name': 'New York'}, {'abbrev': 'BO', 'name': 'Boston'}]}

要查找缩写的name,您应该遍历列表中的字典,然后比较匹配的abbrev - 值:

for city in d['cities']:        # iterate over the inner list
    if city['abbrev'] == 'NY':  # check for a match
        print(city['name'])     # print the matching "name"

您可以保存包含缩写的字典,或者将其保存,而不是print

答案 2 :(得分:2)

使用next并根据'abbrev'键过滤子词典:

d = {'cities': [{'abbrev': 'NY', 'name': 'New York'},
                {'abbrev': 'BO', 'name': 'Boston'}]}

city_name = next(city['name'] for city in d['cities']
                 if city['abbrev'] == 'NY')

print city_name

输出:

New York

答案 3 :(得分:0)

我认为我理解你的问题。

'NY'是一个值,而不是一个键。

也许您需要{'cities':{'NY':'New York','BO':'Boston'}之类的内容,因此您可以输入:myvar['cities']['NY']并返回'New York'

如果您必须使用x = {'cities': [{'abbrev': 'NY', 'name': 'New York'}, {'abbrev': 'BO', 'name': 'Boston'}]},您可以创建一个功能:

def search(abbrev):
    for cities in x['cities']:
        if cities['abbrev'] == abbrev:
            return cities['name']

输出:

>>> search('NY')
'New York'
>>> search('BO')
'Boston'

PD:我使用python 3.6

使用此代码,您还可以找到缩写:

def search(s, abbrev):
    for cities in x['cities']:
        if cities['abbrev'] == abbrev: return cities['name'], cities['abbrev']
        if cities['name'] == abbrev: return cities['name'], cities['abbrev']