Строка в качестве ключевого аргумента и объединение нескольких dict из str.partition () в один единственный dict - PullRequest
0 голосов
/ 26 июня 2018

У меня есть строка, как показано ниже:

src = "raidlevel=1,slot=0,DISK=1i:1:1_1i:1:2"

и я последовал примеру кода из здесь , чтобы преобразовать его в словарь на основе разделителя (=).

for i in src.split(','):
    key, sep, val = i.partition('=')
    dictRaid = {key.lower():val}
    if all(k in dictRaid for k in ('raidlevel', 'slot', 'disk')):
       print "all arguments present"
       print dictRaid

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что функция partition () возвращает несколько отдельных словарей, и поэтому условие if all () возвращает False, а не True. Как объединить эти несколько отдельных словарных результатов из функции partition () в один словарь?

Ответы [ 3 ]

0 голосов
/ 26 июня 2018
src = "raidlevel=1,slot=0,DISK=1i:1:1_1i:1:2"
dict(w.lower().split('=') for w in src.split(','))
# {'raidlevel': '1', 'slot': '0', 'disk': '1i:1:1_1i:1:2'}
0 голосов
/ 26 июня 2018

Вы можете использовать dict конструктор со списком списков из 2 элементов:

src = "raidlevel=1,slot=0,DISK=1i:1:1_1i:1:2"

dictRaid = dict(i.split('=') for i in src.lower().split(','))

print(dictRaid)

{'raidlevel': '1', 'slot': '0', 'disk': '1i:1:1_1i:1:2'}

Обратите внимание, что ваше if условие может быть записано более четко как set разница, а не if all(...).

check_keys = {'raidlevel', 'slot', 'disk'}

if check_keys.issubset(dictRaid):
    # do something
0 голосов
/ 26 июня 2018
dictRaid = {}
src = "raidlevel=1,slot=0,DISK=1i:1:1_1i:1:2"
for i in src.split(','):
    key, sep, val = i.partition('=')
    dictRaid[key.lower()] = val
if all(k in dictRaid for k in ('raidlevel', 'slot', 'disk')):
    print "all arguments present"
    print dictRaid

Выход:

all arguments present
{'slot': '0', 'raidlevel': '1', 'disk': '1i:1:1_1i:1:2'}
  • Объявите ваш dict dictRaid вне цикла for и используйте dict.update для добавления значения ключа
  • if all(k.. должен быть вне цикла for.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...