Python конвертировать список в dict с несколькими значениями ключа

python python-2.7 dictionary

604 просмотра

2 ответа

У меня есть список что-то вроде ниже и хочу преобразовать его в DICT

my_list = ['key1=value1', 'key2=value2', 'key3=value3-1', 'value3-2', 'value3-3', 'key4=value4', 'key5=value5', 'value5-1', 'value5-2', 'key6=value6']

Как я могу конвертировать выше список, чтобы диктовать что-то вроде ниже

my_dict = {
  'key1': 'value1',
  'key2': 'value2',
  'key3': ['value3-1', 'value3-2', 'value3-3'],
  'key4': 'value4',
  'key5': ['value5', 'value5-1', 'value5-2'],
  'key6': 'value6'
}
Автор: Mudasir Mirza Источник Размещён: 08.11.2019 11:13

Ответы (2)


2 плюса

Решение

Несколько способов сделать это, это один: РЕДАКТИРОВАТЬ: мое первое решение дало список для каждого значения, но вам нужен только список, когда для ключа более одного значения.

my_list = ['key1=value1', 'key2=value2', 'key3=value3-1', 'value3-2', 'value3-3', 'key4=value4', 'key5=value5', 'value5-1', 'value5-2', 'key6=value6']

my_dict = {}
current_key = None
for item in my_list:
    if '=' in item:
        current_key, value = item.split('=')
        # This puts a string as the value
        my_dict[current_key] = value  
    else:
        # Check if the value is already a list
        if not isinstance(my_dict[current_key], list):
            # If value is not a list, create one
            my_dict[current_key] = [my_dict[current_key]]

        my_dict[current_key].append(item)

import pprint
pprint.pprint(my_dict)

дает:

{'key1': 'value1',
 'key2': 'value2',
 'key3': ['value3-1', 'value3-2', 'value3-3'],
 'key4': 'value4',  
 'key5': ['value5', 'value5-1', 'value5-2'],
 'key6': 'value6'}

Возможно, вы захотите сделать его более надежным, проверив, если current_keyесть None. Я оставлю это тебе.

Автор: cdarke Размещён: 20.08.2016 11:31

3 плюса

Вот возможное решение:

from collections import defaultdict
import pprint

my_list = ['key1=value1', 'key2=value2', 'key3=value3-1', 'value3-2',
           'value3-3', 'key4=value4', 'key5=value5', 'value5-1', 'value5-2', 'key6=value6']

my_dict = defaultdict(list)
current_key = None

for item in my_list:
    if '=' in item:
        current_key, value = item.split('=')

    my_dict[current_key].append(value)

my_dict = {k: v[0] if len(v) == 1 else v for k, v in my_dict.iteritems()}

pprint.pprint(my_dict)

Из любопытства, если бы вы вводили словарь, получить список было бы тривиально:

from collections import defaultdict

my_dict = {
    'key1': 'value1',
    'key2': 'value2',
    'key3': ['value3-1', 'value3-2', 'value3-3'],
    'key4': 'value4',
    'key5': ['value5', 'value5-1', 'value5-2'],
    'key6': 'value6'
}

output = ["{0}={1}".format(k, ', '.join(v) if type(v) is list else v)
          for k, v in my_dict.iteritems()]
print output
Автор: BPL Размещён: 20.08.2016 11:25
Вопросы из категории :
32x32