2013-07-27 119 views
0

比方说,我有一本字典,看起来像这样:添加到字典的Python中的子字典,以断子词典的关键

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

在这段代码中,我要添加到属于“洛杉矶数组',基本上附加到它。有没有办法执行一个动作,其中1被声明为通配符?我想要做这样的事情:

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

这将导致:

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

你可以澄清更多的你的意思是1被宣布为通配符? – RussW

回答

1

我不知道我是否完全理解这个问题,但是如果我可以试试看。

外部字典中的整数键似乎是什么阻止你。

看来你有城市名称一些数据集,你想这些字符串映射到其他两个数据集,城市数字城市播放列表

而不是在一个多维字典中这样做,你可以使用单独的字典来单独映射。

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

然后数据检索和更新更直截了当。

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

如果我明白你的“通配符”是什么意思

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

您也可以使用映射城市数字列表城市名称如列表有索引,然后使用random.choice从列表中抽出一个随机的城市名称。

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') 

一个班轮版本会抛出StopIteration异常,如果有与“洛杉矶登录”键没有字典。它只会更新匹配的第一个字典。