我想取代字典的价值

时间:2018-05-09 04:33:50

标签: python

我想替换字典的值。我有一个字典,其变量的名称是dct,如

dct={'A': {'a1': [[10.0, 5.0], [7.0, 7.0], [1.0, 5.0], [20.0, 30.0]], 
           'a2': [[50.0, 50.0], [55.0, 60.0]], 
           'a3': [[40.0, 100.0], [100.0, 200.0], [100.0, 140.0], [200.0, 190.0]], 
           'a4': [[50.0, 70.0], [140.0, 130.0], [160.0, 150.0], [200.0, 180.0]], 
           'a5': [[100.0, 110.0], [180.0, 210.0], [60.0, 50.0], [200.0, 190.0]] }}

如果字典的子值如[[10.0, 5.0], [7.0, 7.0], [1.0, 5.0], [20.0, 30.0]]或[[50.0,50.0],[55.0,60.0]]可以分为4,我想替换5而不是子值。如果字典&# 39; s子值可以分为2,我想替换4而不是子值。 所以,我写了代码,

  for ky, vl in dct.items():
        for k,v in vl.items():
            if len(v) %4 == 0:
                    element[ky] = 5
            elif len(v) %2 == 0:
                    element[ky] = 4
            else:
                    continue
  print(element)

但是print(元素)显示{‘A’: {‘a5’: 5}}所以它只有最后一个值。我真的不明白为什么会发生这样的事情。我怎么能解决这个问题?我的代码有什么问题?

2 个答案:

答案 0 :(得分:1)

实际上你的代码执行给定的任务是不正确的,这里是解决你的查询的正确代码,就像你想要实现的一样。 检查下面的代码它是否正常工作,当每个子值可被4整除时,将子值替换为5,当每个子值可被2整除时,将值替换为4

dct = {'A': {'a1': [[10.0, 5.0], [7.0, 7.0], [1.0, 5.0], [20.0, 30.0]],
           'a2': [[50.0, 50.0], [55.0, 60.0]],
           'a3': [[40.0, 100.0], [100.0, 200.0], [100.0, 140.0], [200.0, 190.0]],
           'a4': [[50.0, 70.0], [140.0, 130.0], [160.0, 150.0], [200.0, 180.0]],
           'a5': [[100.0, 110.0], [180.0, 210.0], [60.0, 50.0], [200.0, 190.0]] }}

print (dct)
for k,v in dct.items():
    for ky,vl in v.items():
        for each_elem in (range(0,len(vl))):
            if vl[each_elem][0] % 4 == 0:
                vl[each_elem][0] = 5
            else:
                if vl[each_elem][0] % 2 == 0:
                    vl[each_elem][0] = 4

            if vl[each_elem][1] % 4 == 0:
                vl[each_elem][1] = 5
            else:
                if vl[each_elem][1] % 2 == 0:
                    vl[each_elem][1] = 4

print ("\n")   
print (dct)

将此输出提供给

{'A': {'a1': [[10.0, 5.0], [7.0, 7.0], [1.0, 5.0], [20.0, 30.0]], 'a3': [[40.0, 100.0], [100.0, 200.0], [100.0, 140.0], [200.0, 190.0]], 'a2': [[50.0, 50.0], [55.0, 60.0]], 'a5': [[100.0, 110.0], [180.0, 210.0], [60.0, 50.0], [200.0, 190.0]], 'a4': [[50.0, 70.0], [140.0, 130.0], [160.0, 150.0], [200.0, 180.0]]}}


{'A': {'a1': [[4, 5.0], [7.0, 7.0], [1.0, 5.0], [5, 4]], 'a3': [[5, 5], [5, 5], [5, 5], [5, 4]], 'a2': [[4, 4], [55.0, 5]], 'a5': [[5, 4], [5, 4], [5, 4], [5, 4]], 'a4': [[4, 4], [5, 4], [5, 4], [5, 5]]}}

希望这个答案对你有用。享受美好时光:)

答案 1 :(得分:0)

问题是你将主dict键插入到新的dict中,但是在原始dict中有两个dict,所以你必须维护一个sub或嵌套的dict,然后你最后可以插入那个嵌套的dict到主要词:

试试这段代码:

dct={'A': {'a1': [[10.0, 5.0], [7.0, 7.0], [1.0, 5.0], [20.0, 30.0]], 'a2': [[50.0, 50.0], [55.0, 60.0]], 'a3': [[40.0, 100.0], [100.0, 200.0], [100.0, 140.0], [200.0, 190.0]], 'a4': [[50.0, 70.0], [140.0, 130.0], [160.0, 150.0], [200.0, 180.0]], 'a5': [[100.0, 110.0], [180.0, 210.0], [60.0, 50.0], [200.0, 190.0]] }}
element={}
for ky, vl in dct.items():
    sub_dict={}
    for k, v in vl.items():
        if len(v) % 4 == 0:
            sub_dict[k] = 5
        elif len(v) % 2 == 0:
            sub_dict[k] = 4
        else:
            continue
    element[ky]=sub_dict
print(element)

输出:

{'A': {'a1': 5, 'a2': 4, 'a3': 5, 'a5': 5, 'a4': 5}}