Python - 按密钥而不是

时间:2016-08-26 09:04:14

标签: python-3.x dictionary key

我目前正试图在网页游戏中缓存很多内容。 它有点像一个speedrun游戏,你有特定的部分,它可以节省一个字典中的一个部分的每个持续时间。

所以现在,我有一个很长的词典:

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}]

(对于account_id,更多,最多10个部分,但我刚创建了一个用于此问题的示例)

然后我们需要将这些时间分配给account_id

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

但是当我尝试从缓存中获取时间时,通过

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

它只返回一个

{'损害':5252,' account_id':' 4','期限':66.020756483078}

作为补充:

如果我们解决了这个问题,有没有办法可以给他们订单?因为dicts搞砸了所有东西。

所以它应该从最低持续时间开始到最高持续时间,因为这是正确的正确顺序。

所以我可以使用[0]作为最低持续时间21 [1]为60和[2]为66.我不介意,如果有一个新的键:值与"顺序": " 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 个答案:

答案 0 :(得分:1)

您真正想要做的是创建一个词典列表作为“account_id”键后面的值。现在,您将替换每个添加键的先前值,而不是添加(追加)它。

有关如何在字典中初始化列表的示例,请参阅1

请参阅2以获取某个值上的dicts列表的示例。不过我也可以为这个Job建议一个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