#python #list #dictionary #list-comprehension #dictionary-comprehension
Вопрос:
Вот оригинальная диктатура
uid_coins = {'141632864': {'username': 'Guest130679138', 'coins': 0},
'141632884': {'username': 'Guest130679156', 'coins': 39123441},
'141632886': {'username': 'Guest130679158', 'coins': 44006638}}
То, что я пытаюсь получить
d = {'uid':[141632864, 141632884, 141632886],
'username': ['Guest130679138', 'Guest130679156', 'Guest130679158'],
'coins': [0, 39123441, 44006638]}
Ключи в оригинальном дикте представляют uid.
Это мое то, что я сделал:
uid = list(uid_coins.keys())
username = [u_data['username'] for u_data in uid_coins.values()]
coins = [[u_data['coins'] for u_data in uid_coins.values()]]
d = {"uid":uid, "username":username, "coins":coins}
dict((key,d[key]) for d in data for key in d)
Но я скорее ищу обобщенный подход, чтобы добиться этого без повторного объявления ключей вручную, просто чтобы он работал с новыми ключами в исходных данных.
Комментарии:
1. Что вы пробовали до сих пор. Можете ли вы показать код, который не работает, и любую ошибку, которую он выдает или выводит
Ответ №1:
Попробуй:
uid_coins = {
"141632864": {"username": "Guest130679138", "coins": 0},
"141632884": {"username": "Guest130679156", "coins": 39123441},
"141632886": {"username": "Guest130679158", "coins": 44006638},
}
out = {}
for k, v in uid_coins.items():
out.setdefault("uid", []).append(k)
out.setdefault("username", []).append(v["username"])
out.setdefault("coins", []).append(v["coins"])
print(out)
С принтами:
{'uid': ['141632864', '141632884', '141632886'],
'username': ['Guest130679138', 'Guest130679156', 'Guest130679158'],
'coins': [0, 39123441, 44006638]}
Ответ №2:
Обобщенный (на основе оригинальной версии Андрея Кесели):
d = {}
for k, v in uid_coins.items():
d.setdefault('uid', []).append(k)
for i in v.keys():
d.setdefault(i, []).append(v[i])
Ответ №3:
Аналогичная версия, как у @Andrej Kesely, но с defaultdict
from collections import defaultdict
uid_coins = {
'141632864': {'username': 'Guest130679138', 'coins': 0},
'141632884': {'username': 'Guest130679156', 'coins': 39123441},
'141632886': {'username': 'Guest130679158', 'coins': 44006638}
}
d = defaultdict(list)
for key, value in uid_coins.items():
d['uid'].append(key)
d['username'].append(value['username'])
d['coins'].append(value['coins'])
Выход:
defaultdict(<class 'list'>, {'uid': ['141632864', '141632884', '141632886'], 'username': ['Guest130679138', 'Guest130679156', 'Guest130679158'], 'coins': [0, 39123441, 44006638]})
Ответ №4:
Вот как вы можете получить выходные данные в нужном формате (как указано в вопросе) из данного словаря.
d = {'uid': list(uid_coins.keys()), 'username': [i['username'] for i in list(uid_coins.values())], 'coins': [i['coins'] for i in list(uid_coins.values())]}
list(uid_coins.keys())
вернет все ваши идентификаторы в виде списка.
[i['username'] for i in list(uid_coins.values())]
вернет значения «имя пользователя» в виде списка.
[i['coins'] for i in list(uid_coins.values())]
вернет значения «монет» в виде списка.