Как заменить 2D список значений из словаря Python? - PullRequest
0 голосов
/ 19 сентября 2018

Я создаю словарь 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

Я хочу заменить значения массива values на значения dict и массива данных.

Таким образом, вывод должен быть;

[
    ["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

Этот код не работает должным образом.Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Сначала добавьте (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])

out:

[['P0', 'P1', 'D1', 'D0'],
 ['P1', 'P2', 'D1'],
 ['P2', 'P3', 'D0', 'D1'],
 ['P3', 'P0', 'D0']]
0 голосов
/ 19 сентября 2018

Код:

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']
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...