разобрать упорядоченный словарь питона - PullRequest
0 голосов
/ 05 июля 2018

У меня есть заказанный словарь:

OrderedDict = 
([('time', ['1', '2', '3', '4', '5', '10', '15', '30', '60', '90']), ('uom', ['kpa', 'kpa', 'kpa', 'kpa', 'kpa', 'kpa', 'kpa', 'kpa', 'kpa', 'kpa'])])

У меня есть список шагов корнишона:

List =
['Given Device unit of measure is set to value "<uom>"\n', 'And Device is set to value "<time>"\n']

Как я могу перебрать упорядоченный словарь, чтобы я мог заменить "uom" и "время" в списке на значения в упорядоченном словаре?

Вывод, который я хочу, это:

iteration 1: 
['Given Device unit of measure is set to value 'kpa'\n', 'And Device is set 
to value '1'\n']

iteration 2: 
['Given Device unit of measure is set to value 'kpa'\n', 'And Device is set 
to value '2'\n']

...

iteration 10: 
['Given Device unit of measure is set to value 'kpa'\n', 'And Device is set 
to value '90'\n']

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 05 июля 2018

Хавин и заказанный дикт не важны для вашей задачи, достаточно простого. Упорядоченный диктовка важна, если вы хотите получить ключи в том же порядке, в котором вы их вставили в диктовку.

Вам просто нужны списки двух рассматриваемых ключей: zip (...) их списки значений для пар и распечатка текста-замены:

# simple dict
od = {'time': ['1', '2', '3', '4', '5', '10', '15', '30', '60', '90'], 
      'uom': ['kpa', 'kpa', 'kpa', 'kpa', 'kpa', 'kpa', 'kpa', 'kpa', 'kpa', 'kpa']}

# your text
texts = ['Given Device unit of measure is set to value "<uom>"\n', 'And Device is set to value "<time>"\n']

someList = []

# zip the correlating uom/time/ppm together and iterate them
for tup in zip(od["uom"],od["time"]):
    # create a partial list for this iteration and replace the placeholders
    part = [texts[0].replace("<uom>",tup[0]), texts[1].replace("<time>",tup[1])]
    print(part)

# for good measure: stuff into full list
    someList.append(part)

# print full list
print(someList)

Выход:

['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "1"\n']
['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "2"\n']
['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "3"\n']
['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "4"\n']
['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "5"\n']
['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "10"\n']
['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "15"\n']
['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "30"\n']
['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "60"\n']
['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "90"\n']

[['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "1"\n'], 
 ['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "2"\n'], 
 ['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "3"\n'], 
 ['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "4"\n'], 
 ['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "5"\n'], 
 ['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "10"\n'], 
 ['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "15"\n'], 
 ['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "30"\n'], 
 ['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "60"\n'], 
 ['Given Device unit of measure is set to value "kpa"\n', 'And Device is set to value "90"\n']
]

Sidenote: ваш вывод не совсем возможен, так как вам нужно переключить ' на '"', если вы используете их внутри строки - или наоборот. Вы можете иметь

["some text 'some other' things"] # or
['some text "some other" things'] # or
# you mask them out by
['some text \'some other\' things']

Если у вас нет ключей впереди, вы можете использовать dict.keys (), чтобы получить их. Вот так:

from collections import OrderedDict
od = OrderedDict([('time', ['1', '2', '3', '4', '5', '10', '15', '30', '60', '90']), 
      ('uom', ['kpa', 'kpa', 'kpa', 'kpa', 'kpa', 'kpa', 'kpa', 'kpa', 'kpa', 'kpa']),
      ('ppm', ['009','019','029','039','049','059','069','079','089','099'])])

# your text
texts = ['Given Device unit of measure is set to value "<uom>"\n', 'And Device <ppm> is set to value "<time>"\n']

# zip the correlating uom/time together and iterate them
part = [texts[0], texts[1]] # templated text
keys = list(od.keys()) # all the keys
for tup in zip(*od.values()): # all the value tuples (in key order)
    for idx,val in enumerate(tup):
        corrKey = '<'+keys[idx]+'>'  # get corresponding key as replace text
        part[0] = part[0].replace(corrKey,val) # replace it in both parts
        part[1] = part[1].replace(corrKey,val) # of your text

    print(part)
    # reset to template text    
    part = [texts[0], texts[1]]

Выход:

['Given Device unit of measure is set to value "kpa"\n', 'And Device 009 is set to value "1"\n']
['Given Device unit of measure is set to value "kpa"\n', 'And Device 019 is set to value "2"\n']
['Given Device unit of measure is set to value "kpa"\n', 'And Device 029 is set to value "3"\n']
['Given Device unit of measure is set to value "kpa"\n', 'And Device 039 is set to value "4"\n']
['Given Device unit of measure is set to value "kpa"\n', 'And Device 049 is set to value "5"\n']
['Given Device unit of measure is set to value "kpa"\n', 'And Device 059 is set to value "10"\n']
['Given Device unit of measure is set to value "kpa"\n', 'And Device 069 is set to value "15"\n']
['Given Device unit of measure is set to value "kpa"\n', 'And Device 079 is set to value "30"\n']
['Given Device unit of measure is set to value "kpa"\n', 'And Device 089 is set to value "60"\n']
['Given Device unit of measure is set to value "kpa"\n', 'And Device 099 is set to value "90"\n']
...