簡體   English   中英

使用python中的值過濾字典列表

[英]Filtering a list of dictionaries using its values in python

我有一個字典列表,我想過濾並創建一個與列表值相對應的向量。 該列表文件包含幾個條目,每個條目都有一個字段time, item, state: {values1, value2, value3} 變量item可以采用以下11個值[0.0, 0.1, 0.2, 0.3 ... 1.0] 對於每個值,我想找到對應的value3值,並創建一個包含11個元素的向量,其中每個元素應與關聯的item變量的value3相對應。 例如,如果我的清單是:

my_json = [{'time': datetime.datetime(2018, 7, 4, 13, 42, 55, 613000), 'item': 0.3, 'state': {'value1': 0.0, 'value2': 0.167, 'value3': 0.833}}
{'time': datetime.datetime(2018, 7, 6, 9, 40, 54, 44000), 'item': 0.6, 'state': {'value1': 0.0, 'value2': 0.273, 'value3': 0.727}}
{'time': datetime.datetime(2018, 7, 6, 10, 0, 16, 507000), 'item': 0.5, 'state': {'value1': 0.0, 'value2': 0.0, 'value3': 1.0}}
{'time': datetime.datetime(2018, 7, 6, 10, 37, 16, 769000), 'item': 0.5, 'state': {'value1': 0.0, 'value2': 0.0, 'value3': 1.0}}
{'time': datetime.datetime(2018, 7, 6, 10, 38, 28, 948000), 'item': 0.5, 'state': {'value1': 0.0, 'value2': 0.143, 'value3': 0.857}}
{'time': datetime.datetime(2018, 7, 6, 10, 41, 11, 201000), 'item': 0.4, 'state': {'value1': 0.0, 'value2': 0.091, 'value3': 0.909}}
{'time': datetime.datetime(2018, 7, 6, 11, 45, 25, 145000), 'item': 0.1, 'state': {'value1': 0.0, 'value2': 0.083, 'value3': 0.917}}
{'time': datetime.datetime(2018, 7, 6, 11, 46, 31, 508000), 'item': 0.1, 'state': {'value1': 0.0, 'value2': 0.0, 'value3': 1.0}}
{'time': datetime.datetime(2018, 7, 6, 11, 46, 33, 120000), 'item': 0.1, 'state': {'value1': 0.0, 'value2': 0.214, 'value3': 0.786}}
{'time': datetime.datetime(2018, 7, 6, 12, 36, 25, 695000), 'item': 0.0, 'state': {'value1': 0.0, 'value2': 0.0, 'value3': 1.0}}
{'time': datetime.datetime(2018, 7, 6, 12, 37, 35, 721000), 'item': 0.0, 'state': {'value1': 0.0, 'value2': 0.0, 'value3': 1.0}}]

上面示例的期望輸出是: [1.0, 0.76, 0.0, 0.833, 0.909, 0.857, 0.727, 0.0, 0.0, 0.0, 0.0]通過獲取以下內容也保持最新值(當有多個項目值時)考慮時間。 我試圖使用if-else語句解決它,但是,我想要一個更優雅的解決方案。

創建一個字典,其鍵是item值。 遍歷my_json ,將value3分配給相應的元素。

d = {}
for i in my_json:
    d[i['item']] = i['state']['value3']

我假設列表已經按時間戳排序; 如果不是,請首先對列表進行排序。

我已將上述解決方案擴展為包括按時間排序(如果需要)

sorted_list = sorted(my_json, key=lambda k: k['time'])    

d = {}
for i in sorted_list:
    d[i['item']] = i['state']['value3']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM