python字典中某些键的任何值

时间:2015-05-21 21:18:13

标签: python dictionary

在python中,我有一个名为

的字典
 d = {('A', 'A', 'A'):1, ('A', 'A', 'B'):1, ('A', 'A', 'C'):1, ('A', 'B', 'A'): 2, ('A', 'B','C'):2, ...}.

是否有一种简单的方法来更改密钥时的值(例如10),例如,('A', 'A', _)其中_可以是任何字符A~Z?< / p>

所以,它最后会看起来像{('A', 'A', 'A'):10, ('A', 'A', 'B'):10, ('A', 'A', 'C'):10, ('A', 'B', 'A'): 2, ('A', 'B', 'C'):2, ...}

就目前而言,我使用了x变量('A', 'A', x)的循环,但我想知道python中是否有这样的关键字。

感谢您的提示。

2 个答案:

答案 0 :(得分:3)

只要检查每个元组的前两个元素,最后一个是不相关的,除非你特别想确保它也是一个字母:

for k  in d:
    if k[0] == "A" and k[1] == "A":
        d[k] = 10
print(d)
{('A', 'B', 'A'): 2, ('A', 'B', 'C'): 2, ('A', 'A', 'A'): 10, ('A', 'A', 'C'): 10, ('A', 'A', 'B'): 10}

如果最后一个元素实际上也必须是alpha,那么使用str.isalpha:

d = {('A', 'A', '!'):1, ('A', 'A', 'B'):1, ('A', 'A', 'C'):1, ('A', 'B', 'A'): 2, ('A', 'B','C'):2}

for k in d:
    if all((k[0] == "A", k[1] == "A", k[2].isalpha())):
        d[k] = 10
print(d)
{('A', 'B', 'A'): 2, ('A', 'B', 'C'): 2, ('A', 'A', '!'): 1, ('A', 'A', 'C'): 10, ('A', 'A', 'B'): 10}

没有d[('A', 'A', _)]=10可用的关键字,你可以使用python2的地图破解功能方法:

d = {('A', 'A', 'A'):1, ('A', 'A', 'B'):1, ('A', 'A', 'C'):1, ('A', 'B', 'A'): 2, ('A', 'B','C'):2}

map(lambda k: d.__setitem__(k, 10) if ((k[0], k[1]) == ("A", "A")) else k, d)

print(d)
{('A', 'B', 'A'): 2, ('A', 'B', 'C'): 2, ('A', 'A', 'A'): 10, ('A', 'A', 'C'): 10, ('A', 'A', 'B'): 10}

或包括isalpha:

d = {('A', 'A', '!'):1, ('A', 'A', 'B'):1, ('A', 'A', 'C'):1, ('A', 'B', 'A'): 2, ('A', 'B','C'):2}

map(lambda k: d.__setitem__(k, 10) if ((k[0], k[1],k[2].isalpha()) == ("A", "A",True)) else k, d)

print(d)

答案 1 :(得分:1)

这样的事情怎么样:

for item in d.keys():
    if re.match("\('A', 'A', '[A-Z]'\)",str(item)):
        d[item] = 10

这是另一种方法。在控制台中返回None,但似乎更新值:

[d.update({y:10}) for y in [x for x in d.keys() if re.match("\('A', 'A', '[A-Z]'\)",str(x))]]