python|字典反映射

本文主要是通过现有字典对应的键值将某列表中包含的字典中的键值进行改变。

在这里插入图片描述

思路1:

  • 利用元组的切片进行操作,详细看代码

代码1:

def fun(lists,dicts):
    '''
    注意lists和dicts不能混
    '''
    res = []
    for i in lists:
        dict1 = {}
        for j in i.items():
            t = j[0]
            for k in range(len(t)):
                temp = [x for x,y in dicts.items() if y == t[k]] # 找到对应值的键
                temp = tuple(temp)
                if k == 0:
                    t = temp + t[1:]
                elif k == len(t):
                    t = t[:-1] + temp
                else:
                    t = t[:k] + temp + t[k+1:]
            dict1[t] = j[1]
        res.append(dict1)
    return res

if __name__ == "__main__":
    dicts = {'abc':0,'ade':1,'dfec':2,'sg':3,'grf':4,'sfs':5,'secre':6}
    lists = [{(0,):179,(6,):114},{(2,3):69,(4,5):90},{(0,0,0):528,(3,4,2):835},{(0,0,0,0):208}]
    print(fun(lists,dicts))

思路2:

  • 通过先把字典中的键和值分开保存,然后再找到列表中元素值对应的字典的键。

代码2:

dicts = {'abc': 0, 'ade': 1, 'dfec': 2, 'sg': 3, 'grf': 4, 'sfs': 5, 'secre': 6}
lists = [{(0,): 179, (6,): 114}, {(2, 3): 69, (4, 5): 90}, {(0, 0, 0): 528, (3, 4, 2): 835}, {(0, 0, 0, 0): 208}]
def fun(dicts,lists):
    key_list=[]
    value_list=[]
    for key,value in dicts.items():
        key_list.append(key)
        value_list.append(value)
    res = []
    for i in lists:
        res1 = {}
        for j,k in i.items():
            number_list = []
            for number in j:
                if number in value_list:
                    number = key_list[value_list.index(number)]
                    number_list.append(number)
            number_tuple = tuple(number_list)
            res1[number_tuple] = k
            res.append(res1)
    print(res)
fun(dicts,lists)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiao黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值