首页 > 解决方案 > 从字典中获取 key_tags?

问题描述

我有以下字典,我想要每个城市的所有键(即它属于哪个标签,例如肾上腺素或空气等)。

dictionary = {u'adrenaline': {u'estimated_total': 234,
u'more': True,
u'results': [{u'adrenaline_score': 2.11474252688113, u'name': u'Rome'},
             {u'adrenaline_score': 1.94859310493828, u'name': u'Budapest'},
             {u'adrenaline_score': 2.65914794847249, u'name': u'Ubud'},
             {u'adrenaline_score': 1.94859310493828, u'name': u'Calgary'},
             {u'adrenaline_score': 3.0, u'name': u'Canc\xfan'}]},
u'air': {u'estimated_total': 234,
u'more': True,
u'results': [{u'air_score': 1.50402325242855, u'name': u'Paris'},
           {u'air_score': 1.50402325242855, u'name': u'Rome'},
           {u'air_score': 1.50402325242855, u'name': u'New York City'},
           {u'air_score': 1.50402325242855, u'name': u'Abu Dhabi'},
           {u'air_score': 1.50402325242855, u'name': u'Key West'},
           {u'air_score': 1.50402325242855, u'name': u'Salt Lake City'}]}

与城市相关的标签(键)和分数。

输出:

     {'Rome': {'adrenaline': 2.11474252688113, 'air': 1.50402325242855},
      'Budapest': {'adrenaline': 1.94859310493828},
      'Ubud': {'adrenaline': 2.65914794847249},
      'Calgary': {'adrenaline': 1.94859310493828}....}

标签: pythonlistdictionary

解决方案


将您的 dict 重命名d为不使用 reserved 关键字dict,您可以执行以下操作(根据您想要的输出进行调整,尚不清楚):

In [1]:
result = {}
for k, v in d.items():
    for score_row in v['results']:
        city = score_row['name']
        if not city in result.keys():
            result[city] = {}
        result[city][k] = score_row['{}_score'.format(k)]

Out[1]:
{'Rome': {'adrenaline': 2.11474252688113, 'air': 1.50402325242855},
 'Budapest': {'adrenaline': 1.94859310493828},
 'Ubud': {'adrenaline': 2.65914794847249},
 'Calgary': {'adrenaline': 1.94859310493828},
 'Cancún': {'adrenaline': 3.0},
 'Paris': {'air': 1.50402325242855},
 'New York City': {'air': 1.50402325242855},
 'Abu Dhabi': {'air': 1.50402325242855},
 'Key West': {'air': 1.50402325242855},
 'Salt Lake City': {'air': 1.50402325242855}}

推荐阅读