У меня есть словарь, который выглядит так:

d = {'jack': {'age':35, 'status': 'single'}, 
'stephan': {'age':27, 'status': 'married'},
'anna': {'age':29, 'status': 'married'},
'max': {'age':37, 'status': 'single'}}

Моя конечная цель - разделить его на 4 отдельных словаря по ключу и дать каждому из этих словарей уникальное имя, например:

a = {'jack': {'age':35, 'status': 'single'}}
b = {'stephan': {'age':27, 'status': 'married'}}
c = {'anna': {'age':29, 'status': 'married'}}
e = {'max': {'age':37, 'status': 'single'}}

У меня есть функция, которая разделяет dict по ключам и возвращает список словарей:

def split_dict_equally(input_dict, chunks=4):
# prep with empty dicts
return_list = [dict()] * chunks
idx = 0
for k,v in input_dict.items():
    return_list[idx][k] = v
    if idx < chunks-1:  # indexes start at 0
        idx += 1
    else:
        idx = 0
return return_list

Но это не совсем то, что я хочу. Любые идеи будут очень цениться.

-1
Ekaterina 28 Авг 2017 в 14:46

3 ответа

Лучший ответ
# Transform the dict into a list of dicts
people = [{k: v} for k, v in original_dict.iteritems()]
# Unpack the first 4 elements of the list into 4 new variables
a, b, c, e = people[:4]
0
Hrabal 28 Авг 2017 в 15:34

Измените свой словарь к этому:

d = {'jack': {'age':35, 'status': 'single'}, #seems more intuitive
'stephan': {'age':27, 'status': 'married'},
'anna': {'age':29, 'status': 'married'},
'max': {'age':37, 'status': 'single'}}
#print
a={}
b={}
a['jack']=d['jack']
...
1
akp 28 Авг 2017 в 12:07

Вы можете написать небольшую функцию для создания новых независимых диктовок, например:

def func(dct):
   names = ('jack', 'stephan', 'anna', 'max')
   return [{k: dct[k].copy()} for k in names]

a, b, c, d = func(dct)
print(a)
# {'jack': {'status': 'single', 'age': 35}}

Если вы хотите использовать те же самые, вложенные в основной, то вам не нужно copy.

1
Moses Koledoye 28 Авг 2017 в 12:21