как создать новый ключ из значения другого ключа Python - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть список словарей, который выглядит следующим образом:

data = [{'Name': 'Paul', 'Date': '20200412', 'ID': '1020'}, {'Name': 'Frank', 'Date': '20200413', 'ID': '1030'}, {'Name': 'Anna', 'Date': '20200414', 'ID': '1040'}]

Мне нужно создать новый список словарей, где значением ID будет ключ, а значением - другой словарь с ключом. / значения, связанные с указанным c ID. Это желаемый результат:

new_data = [{'1020': {'Name': 'Paul', 'Date': '20200412'}},
{'1030': {'Name': 'Frank', 'Date': '20200413'}},
{'1040': {'Name': 'Anna', 'Date': '20200414'}}]

Я пытался:

for index, my_dict in enumerate(data):
    new_data = []
    key = my_dict['ID']
    new_data.append(key)

Но это только присвоило значение ключа, не знаю, как ввести sh в новый дикт вместе с другими ключом / значениями.

Ответы [ 4 ]

1 голос
/ 23 апреля 2020
>>> [{i['ID']: {k:v for k,v in i.items() if k != 'ID'}} for i in data]
[{'1020': {'Name': 'Paul', 'Date': '20200412'}},
 {'1030': {'Name': 'Frank', 'Date': '20200413'}},
 {'1040': {'Name': 'Anna', 'Date': '20200414'}}]
0 голосов
/ 23 апреля 2020

Чтобы добавить другие значения, вам просто нужно создать новый dict следующим образом:

new_data.append( key:{
'name':my_dict['name']
'Date':my_dict['date']
}

Вам также не нужно создавать переменную 'key', вы можете просто использовать 'my_dict [' ID ']'

0 голосов
/ 23 апреля 2020
new_data = []
for index, my_dict in enumerate(data):
    key = my_dict['ID']
    del my_dict['ID']
    new_data.append({key:data[index]})
0 голосов
/ 23 апреля 2020

Вы можете попробовать это понимание списка:

[{x["ID"]: {k: v for k, v in x.items() if k != "ID"}} for x in data]

, которое присваивает ID в качестве родительского ключа словаря и отфильтровывает ключ ID из дочернего словаря в понимании dict

Что можно разбить на это:

result = []
for x in data:
    result.append({x["ID"]: {k: v for k, v in x.items() if k != "ID"}})

И даже на прямолинейный подход l oop:

result = []
for x in data:
    dic = {x["ID"]: {}}
    for k, v in x.items():
        if k != "ID":
            dic[x["ID"]][k] = v
    result.append(dic)

Выход:

[{'1020': {'Name': 'Paul', 'Date': '20200412'}}, {'1030': {'Name': 'Frank', 'Date': '20200413'}}, {'1040': {'Name': 'Anna', 'Date': '20200414'}}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...