Удалить определенные строки из словаря - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть словарь в этом формате

Open = {'22.0x7.5x8.0 12.0': ['4.60x4.30x4.30 13.00, 4.60x4.30x4.30 1.00, 
                              4.60x4.30x4.30 2.00, 6.60x6.00x5.16 5.00'], 
         '18.0x7.0x7.0 7.0': ['4.60x4.30x4.30 1.00, 8.75x6.60x5.60 4.00'],
           '22.0x7.5x8.0 9.0': ['6.60x6.00x5.16 5.00, 6.60x6.00x5.16 9.00, 
                                6.60x6.00x5.16 5.00']}

Я хочу удалить часть измерений (1x2x3) из ключей, а также значения и преобразовать оставшуюся часть в целое число. Как я могу это сделать?

такой, что мой вывод похож на

new = {12:[13,1,2,5],
          7:[1,4]...}

Ответы [ 2 ]

2 голосов
/ 29 апреля 2019

Использование str.split должно быть достаточно.

Open = {'22.0x7.5x8.0 12.0': ['4.60x4.30x4.30 13.00, 4.60x4.30x4.30 1.00',
                              '4.60x4.30x4.30 2.00, 6.60x6.00x5.16 5.00'],
         '18.0x7.0x7.0 7.0': ['4.60x4.30x4.30 1.00, 8.75x6.60x5.60 4.00'],
           '22.0x7.5x8.0 9.0': ['6.60x6.00x5.16 5.00, 6.60x6.00x5.16 9.00',
                                '6.60x6.00x5.16 5.00']}

res = {}
for key,value in Open.items():

    #Split on space and convert to int for key
    k = int(float(key.split()[1]))
    li = []
    for v in value:
        #First split on comma
        for i in v.split(','):
            #Then split on space
            num = int(float(i.split()[1]))
            #Append the number to a list
            li.append(num)
    #Assign the list to the key
    res[k] = li

print(res)

Выход будет

{12: [13, 1, 2, 5], 7: [1, 4], 9: [5, 9, 5]}
1 голос
/ 29 апреля 2019

Использование str.split

Ex:

Open = {'18.0x7.0x7.0 7.0': ['4.60x4.30x4.30 1.00, 8.75x6.60x5.60 4.00'], '22.0x7.5x8.0 12.0': ['4.60x4.30x4.30 13.00, 4.60x4.30x4.30 1.00, 4.60x4.30x4.30 2.00, 6.60x6.00x5.16 5.00'], '22.0x7.5x8.0 9.0': ['6.60x6.00x5.16 5.00, 6.60x6.00x5.16 9.00,6.60x6.00x5.16 5.00']}

print({float(k.split()[1]): [float(j.split()[1]) for i in v for j in i.split(",")] for k,v in Open.items()})
#Or
#print({int(float(k.split()[1])): [int(float(j.split()[1])) for i in v for j in i.split(",")] for k,v in Open.items()})

Выход:

{9.0: [5.0, 9.0, 5.0], 12.0: [13.0, 1.0, 2.0, 5.0], 7.0: [1.0, 4.0]}
...