【问题标题】:Python - Get more values by key instead of onePython - 通过键而不是一个获取更多值
【发布时间】:2016-08-26 09:04:14
【问题描述】:

我目前正在尝试在我的网页游戏中缓存很多内容。 它有点像一个快速运行的游戏,你有特定的部分,它会在字典中保存一个部分的每个持续时间。

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

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)

它只返回一个

{'Damage': 5252, 'account_id': '4', 'duration': 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}]

【问题讨论】:

    标签: python-3.x dictionary key


    【解决方案1】:

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

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

    请参阅2 以获取按特定值对 dicts 列表进行排序的示例。不过,我也可以为这项工作推荐一个 Pandas 数据框。

    这可能是一个解决方案:

    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
    

    【讨论】:

      猜你喜欢
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      • 2017-04-29
      • 2021-11-23
      • 2018-04-13
      • 2015-12-14
      • 1970-01-01
      相关资源
      最近更新 更多