在Python中添加字典子字典,基于子字典的键

时间:2013-07-27 10:48:45

标签: python python-2.7 dictionary

假设我的字典看起来像这样:

test = {1: {'los angeles': ['playlist1', 'playlist2']}, 2: {'houston': ['playlist']}}

在这段代码中,我想添加属于'los angeles'的数组,基本上附加到它。有没有办法执行1声明为通配符的操作?我想做这样的事情:

test[_]['los angeles'].append('playlist3')

哪会导致:

test = {1: {'los angeles': ['playlist1', 'playlist2', 'playlist3']}, 2: {'houston': ['playlist']}}

2 个答案:

答案 0 :(得分:1)

没有像野外卡那样的东西。你应该手动完成:

for k in test:
    if 'los angeles' in test[k]:
        test[k]['los angeles'].append('playlist3')

或者:

test[next(k for k in test if 'los angeles' in test[k])]['los angeles'].append('playlist3')

如果没有带有“log angeles”键的字典,单行版本将抛出StopIteration。它只更新匹配的第一个字典。

答案 1 :(得分:1)

我不知道我是否完全理解这个问题,但我是否可以尝试一下。

外部字典中的整数键似乎正在阻碍你。

您似乎有一些城市名称的数据集,并且您希望将这些字符串映射到另外两个数据集,城市数字城市播放列表

不是在一个多维dict中完成所有操作,而是可以使用单独的dicts进行单独的映射。

city_playlists = {'los angeles':['playlist1', 'playlist2'],
                  'houston':['playlist']}
city_names = {1:'los angeles',
              2:'houston'}

然后,数据检索和更新就更加简单。

city_playlists['los angeles'].append('playlist3')

如果我理解你的'wildcard'是什么意思

wildcard = random.randint(1, len(city_names))
name = city_names[wildcard]
city_playlists[name].append('newplaylist')

您还可以使用列表将城市数字映射到城市名称,因为列表已编制索引,然后使用random.choice从中提取随机城市名称清单。