【问题标题】:How to Change a Dictionaries Key Based on the Value Designated to the Same Key in Another Dictionary?如何根据指定给另一个字典中相同键的值更改字典键?
【发布时间】:2017-11-02 23:50:29
【问题描述】:

我正在尝试使用另一个字典中的键值对来更新字典键。我试图组合的两个字典都嵌套在列表中:

dictionary1 = [{ '32639': {'78549': {'526' : { 'sum': 8930.40, 'min' : 2380, 'max': 74839}}}} , {'89304': {'20384': {'152' : { 'sum': 51235.20, 'min' : 4512, 'max': 362.69}}}}, { '41526': {'45315': {'364' : { 'sum': 8985.65, 'min' : 3632.32, 'max': 4558.15}}}}]

dictionary2 = [{'32639':'90283'}, {'49034': '89203'}, {'28942': '39024'}, {'41526':'24903'} ]

我希望生成的字典看起来与字典 1 完全相同,但是如果字典 1 中字典的键位于字典 2 字典中的键中,则应更改它们。

结果字典:

new_dictionary = [{ '90283': {'78549': {'526' : { 'sum': 8930.40, 'min' : 2380, 'max': 74839}}}} , {'89304': {'20384': {'152' : { 'sum': 51235.20, 'min' : 4512, 'max': 362.69}}}}, { '24903': {'45315': {'364' : { 'sum': 8985.65, 'min' : 3632.32, 'max': 4558.15}}}}]

我已经尝试过:

list1 = []
for d1, d2 in zip(dictionary1, dictionary2):
    for key, value in d1.iteritems():
        new_dict = {}
        if key in d2:
            new_dict[d2[key]] = value
            list1.append(new_dict)
        else:
            new_dict[key] = value
            list1.append(new_dict)

但是它不起作用,但是在这个示例数据上它起作用了,程序仅根据字典 2 的长度迭代字典 1。因此,我尝试使用包含 841 个字典(字典 1)和 53 个字典列表(字典 2)的列表来运行它,并且它只会在退出之前转换字典 1 中的前 53 个键。

【问题讨论】:

    标签: python python-2.7 list dictionary iteration


    【解决方案1】:

    试试这样的:

    ds1 = [{ '32639': {'78549': {'526' : { 'sum': 8930.40, 'min' : 2380, 'max': 74839}}}} , {'89304': {'20384': {'152' : { 'sum': 51235.20, 'min' : 4512, 'max': 362.69}}}}, { '41526': {'45315': {'364' : { 'sum': 8985.65, 'min' : 3632.32, 'max': 4558.15}}}}]
    
    ds2 = [{'32639':'90283'}, {'49034': '89203'}, {'28942': '39024'}, {'41526':'24903'} ]
    
    def trans(ds1, ds2):
        for d1 in ds1:
            for d2 in ds2:
                ckeys = d1.keys() & d2.keys()
                ukeys = d1.keys() - d2.keys()
                for ck in ckeys:
                    yield (d2[ck], d1[ck])
                for uk in ukeys:
                    yield (uk, d1[uk])
    print(dict(trans(ds1, ds2)))
    

    我得到了输出:

    {'90283': {'78549': {'526': {'sum': 8930.4, 'min': 2380, 'max': 74839}}}, '32639': {'78549': {'526': {'sum': 8930.4, 'min': 2380, 'max': 74839}}}, '89304': {'20384': {'152': {'sum': 51235.2, 'min': 4512, 'max': 362.69}}}, '41526': {'45315': {'364': {'sum': 8985.65, 'min': 3632.32, 'max': 4558.15}}}, '24903': {'45315': {'364': {'sum': 8985.65, 'min': 3632.32, 'max': 4558.15}}}}

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 1970-01-01
      • 2021-07-13
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多