在字典列表中更改元组

时间:2020-09-11 15:08:14

标签: python python-3.x

D = {'A':
        [ ( '1','2' ), ( '3', '4' )],
     'B':
        [ ( '5','6' ), ( '7','8' ) ]
    }

x = '6'

for key in D:
    for val in D[key]:
        if x in val:
            val=('50','60')
        
print(D)

您好,我想对键B的值进行更改,但我想知道为什么它不显示此键:

    D = {'A':
            [ ( '1','2' ), ( '3','4' ) ],
         'B':
            [ ( '50','60' ), ( '7','8' ) ]
        }

我该如何解决?

4 个答案:

答案 0 :(得分:3)

通过执行val=('50','60'),您将替换变量本身,而不是列表的内容。

for d_val in D.values():
    for rank, val in enumerate(d_val):
        if x in val:
            d_val[rank] = ('50', '80')

答案 1 :(得分:0)

val是对该元素的本地引用。覆盖它时,您只需为该变量分配一个新的元组-它与包含它的列表无关。相反,您可以循环列表的索引并直接更新列表:

for key in D:
    for i in range(len(D[key])):
        if x in D[key][i]:
            D[key][i] = (50,50)

答案 2 :(得分:0)

您可以使用字典理解功能在一行中完成此操作。

这是您的代码,用于定义字典d和值x

d = {'A':
        [ ( '1','2' ), ( '3', '4' )],
     'B':
        [ ( '5','6' ), ( '7','8' ) ]
    }
x = '6'

下面一行代码将使用新值再次创建字典d。为了向您显示dr的不同仅存在很小的差异,我保留了字典d

r = {k:[(50,60) if x in i else i for i in d[k]] for k in d.keys()}

为了确保只有一项更改,我同时打印了dr

print (d)
print (r)

输出如下:

{'A': [('1', '2'), ('3', '4')], 'B': [('5', '6'), ('7', '8')]}
{'A': [('1', '2'), ('3', '4')], 'B': [(50, 60), ('7', '8')]}

答案 3 :(得分:0)

无法编辑对话。你去!祝你有美好的一天!

相关问题