【问题标题】:How to replace 2D list values from python dictionary?如何从 python 字典中替换 2D 列表值?
【发布时间】:2019-02-23 03:32:04
【问题描述】:

我正在运行时创建一个 Python 字典,如下所示,

valueDict =  {(0, 0): 'P0', (20, 0): 'P1', (20, 11.36): 'P2', (0, 11.36): 'P3'}

我有两个数组;

values = [[0, 0, 20, 0, 15, 5.5, 5, 5.5]
    [20, 0, 20, 11.36, 15, 5.5]
    [20, 11.6, 0, 11.36, 5, 5.5, 15, 5.5]
    [0, 11.36, 0, 0, 5, 5.5]]  

data = [5, 5.5, 15, 5.5] 
data[0] -> D0
data[1] -> D1

我想用 dict 值和数据数组值替换 values 数组的值。

所以输出应该是;

[
    ["P0", "P1", "D1", "D0"],
    ["P1", "P2", "D1"],
    ["P2", "P3", "D0", "D1"],
    ["P3", "P0", "D0"]
]

我尝试过的是,

for x in range(0,len(values), 1):
    y = 0
    oneD = values[x]

for i, j in valueDict.iteritems():
    print("y ", y)
    print("left : ",(oneD[y], oneD[y+1])," right : ",i)
    if ((oneD[y], oneD[y+1]) == i ):
        oneD[y] = oneD[y].replace(j)
        oneD[y+1] = oneD[y+1].replace(j)

    elif((oneD[y], oneD[y+1]) == data[0]):
        oneD[y] = oneD[y].replace("D0")
        oneD[y+1] = oneD[y+1].replace("D0")

    elif((oneD[y], oneD[y+1]) == data[1]):
        oneD[y] = oneD[y].replace("D1")
        oneD[y+1] = oneD[y+1].replace("D1")

    else:
        y += 2
        continue

    y += 2

此代码无法正常工作。我该怎么做?

【问题讨论】:

    标签: python python-3.x dictionary multidimensional-array


    【解决方案1】:

    代码:

    value_dict = {(0, 0): 'P0', (20, 0): 'P1', (20, 11.36): 'P2',
                  (0, 11.36): 'P3'}
    
    values = [
        [0, 0, 20, 0, 15, 5.5, 5, 5.5],
        [20, 0, 20, 11.36, 15, 5.5],
        [20, 11.36, 0, 11.36, 5, 5.5, 15, 5.5],
        [0, 11.36, 0, 0, 5, 5.5]
    ]
    
    data = [5, 5.5, 15, 5.5]
    
    # add data to value_dict
    iterator = iter(data)
    for i, j in enumerate(iterator):
        value_dict[j, next(iterator)] = 'D{}'.format(i)
    
    
    # Translate the data
    result = []
    for v in values:
        line = []
        iterator = iter(v)
        for i in iterator:
            line.append(value_dict[(i, next(iterator))])
        result.append(line)
    
    print(value_dict)
    print(result)
    

    结果:

    {
        (0, 0): 'P0', 
        (20, 0): 'P1', 
        (20, 11.36): 'P2', 
        (0, 11.36): 'P3', 
        (5, 5.5): 'D0', 
        (15, 5.5): 'D1'
    }
    
    [
        ['P0', 'P1', 'D1', 'D0'], 
        ['P1', 'P2', 'D1'], 
        ['P2', 'P3', 'D0', 'D1'], 
        ['P3', 'P0', 'D0']
    ]
    

    【讨论】:

      【解决方案2】:

      首先将(5, 5.5): 'D0', (15, 5.5): 'D1'添加到valueDict

      valueDict =  {(0, 0): 'P0', (20, 0): 'P1', (20, 11.36): 'P2', (0, 11.36): 'P3', (5, 5.5): 'D0', (15, 5.5): 'D1'}
      

      并在值中将11.6 更改为11.36

      values = [[0, 0, 20, 0, 15, 5.5, 5, 5.5],
               [20, 0, 20, 11.36, 15, 5.5],
               [20, 11.36, 0, 11.36, 5, 5.5, 15, 5.5],
               [0, 11.36, 0, 0, 5, 5.5]]  
      

      首先我们遍历它并将其转换为元组:

      tuples_values = []
      for v in values:
          tuples_values.append([(v[i], v[i+1]) for i in range(0, len(v), 2)])
      

      然后我们遍历它并用dict的值替换它:

      out = []
      for v in tuples_values:
          out.append([valueDict[tuple_value] for tuple_value in v])
      

      出来:

      [['P0', 'P1', 'D1', 'D0'],
       ['P1', 'P2', 'D1'],
       ['P2', 'P3', 'D0', 'D1'],
       ['P3', 'P0', 'D0']]
      

      【讨论】:

        猜你喜欢
        • 2010-11-07
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 2017-12-25
        • 2019-03-18
        • 2020-07-11
        • 2019-04-07
        相关资源
        最近更新 更多