【问题标题】:Replace values in nested list with dict in Python?用Python中的dict替换嵌套列表中的值?
【发布时间】:2023-03-27 15:54:01
【问题描述】:

我有一个嵌套列表:

my_list = ['a','b','c','dog', ['pig','cat'], 'd']

还有一个字典:

my_dict = {'dog':'c','pig':'a','cat':'d'}

我想使用字典,这样我得到一个列表:

new_list = ['a', 'b', 'c', 'c', ['a', 'd'], 'd']

我尝试过类似的方法:

new_list = []
for idx1, item1 in enumerate(my_list):
    for idx2, item2 in enumerate(item1):
        new_list[idx1][idx2] = my_dict[item2]

但是当item2dict 中不存在时,我得到一个错误。有没有更好的方法来做到这一点?

【问题讨论】:

    标签: python string list dictionary replace


    【解决方案1】:
    my_list = ['a','b','c','dog', ['pig','cat'], 'd']
    my_dict = {'dog':'c','pig':'a','cat':'d'}
    
    
    def replace(item):
        if item in my_dict:
            return my_dict[item]
        else:
            return item
    new_list=[];
    for item in my_list:
        if isinstance(item,list):
            temp_list=[]
            for subitem in item:
                temp_list.append(replace(subitem))
            new_list.append(temp_list)
        else:
            new_list.append(replace(item))
    print new_list
    

    如果my_list 内的列表嵌套在自身中,则这段代码将不起作用。

    【讨论】:

      【解决方案2】:

      您看起来像是在尝试替换为嵌套列表。试试这个函数,它会递归地为你交换值:

      def replace_vals(_list, my_dict):
          new_list = []
          for item in _list:
              if isinstance(item, list):
                    new_list.append(replace_vals(item, my_dict))
              elif item in my_dict:
                  new_list.append(my_dict.get(item))
              else:
                  new_list.append(item)    
          return new_list
      
      print replace_vals(my_list, my_dict)
      

      【讨论】:

        【解决方案3】:

        您可以编写一个简单的递归函数,使用列表推导生成结果。如果列表中的项目是列表,则递归,否则使用 dict.get 和默认参数来转换项目:

        my_list = ['a','b','c','dog', ['pig','cat'], 'd']
        my_dict = {'dog':'c','pig':'a','cat':'d'}
        
        def convert(l, d):
            return [convert(x, d) if isinstance(x, list) else d.get(x, x) for x in l]
        
        print(convert(my_list, my_dict))
        

        输出:

        ['a', 'b', 'c', 'c', ['a', 'd'], 'd']
        

        【讨论】:

          猜你喜欢
          • 2016-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-16
          • 1970-01-01
          • 2019-09-06
          • 2021-10-11
          相关资源
          最近更新 更多