0

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

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']}}
4

2 回答 2

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。它只更新第一个匹配的字典。

于 2013-07-27T10:56:27.593 回答
1

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

外部字典中的整数键似乎是阻碍你的原因。

似乎您有一些城市名称数据集,并且您希望将这些字符串映射到另外两个数据集city numberscity playlists

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

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从列表中提取随机城市名称。

于 2013-07-27T11:17:22.493 回答