我有一些这样的数据:
{'cities': [{'abbrev': 'NY', 'name': 'New York'}, {'abbrev': 'BO', 'name': 'Boston'}]}
根据我对Python的稀缺知识,这看起来像字典中的字典。
但无论哪种方式,我如何使用" NY"作为获取价值的关键"纽约"?
答案 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']