2016-08-26 1 views
0

В настоящее время я пытаюсь кэшировать много вещей в своей веб-игре. Это своего рода игра с ускорением, где у вас есть определенные разделы и она сохраняет каждую продолжительность для раздела в dict.Python - получить больше значений ключом, а не одним

Так прямо сейчас, у меня есть довольно длинный Dict:

dict = [{'account_id': '10', 'Damage': 4874, 'duration': 50.020756483078},  
{'account_id': '10', 'Damage': 5920, 'duration': 20.020756483078}, 
{'account_id': '10', 'Damage': 2585, 'duration': 30.02078}, 
{'account_id': '4', 'Damage': 3145, 'duration': 21.020756483078}, 
{'account_id': '4', 'Damage': 4202, 'duration': 60.020756483078}, 
{'account_id': '4', 'Damage': 5252, 'duration': 66.020756483078}] 

(Его гораздо больше, до 10 секций в течение ACCOUNT_ID, но я только что создал пример, чтобы использовать для этого вопроса)

Затем нам нужно присвоить те времена к ACCOUNT_ID

enterDict = {} 
for x in dict : 
    enterDict[x["account_id"]] = x 

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

account_id = "4" 
EnterInfo = enterDict[account_id] 
print(EnterInfo) 

Это возвращает только один

{ 'Damage': 5252, 'account_ID': '4', 'длительность': 66.020756483078}

В дополнение:

Если решить эту проблему , есть ли способ дать им заказ? Поскольку dicts все испортили.

Поэтому он должен начинаться с наименьшей продолжительности до верхней, так как это правильный правильный порядок.

Поэтому я мог бы использовать [0] для наименьшей продолжительности 21 [1] для 60 и [2] для 66. Я бы не возражал, если есть новый ключ: значение с «order»: «0», «порядок»: «1» и «порядок»: «2»

{'account_id': '4', 'Damage': 3145, 'duration': 21.020756483078}, 
{'account_id': '4', 'Damage': 4202, 'duration': 60.020756483078}, 
{'account_id': '4', 'Damage': 5252, 'duration': 66.020756483078}] 

ответ

1

То, что вы на самом деле хотите сделать, это создать список словарей в качестве значения за ключом «account_ID». Теперь вы заменяете с каждым добавлением предыдущее значение для ключа вместо добавления (добавления) к нему.

См. 1 для примера, как инициализировать списки в словаре.

См. 2 для примера, чтобы заказать списки диктов по определенному значению. Однако я мог бы также предложить Pandas Dataframe для этого задания.

Это может быть решение:

from collections import defaultdict 
from operator import itemgetter 

enterDict = defaultdict(list) 
for item in dict: 
    enterDict[item['account_id']].append(item) 

sortDict = defaultdict(list) 
for key_of_dict in enterDict: 
    sorted_list = sorted(enterDict[key_of_dict], key=itemgetter('duration')) 
    sortDict[key_of_dict] = sorted_list