簡體   English   中英

python - 字典 - 更新鍵的文本值 - 設置優先級(最大原則)

[英]python - dictionary - update text values of keys - setting an priority (max principle)

我有以下字符串作為字典鍵的值:

["low", "middle", "high", "very high"]

這些是字典項鍵“優先級”的選項,示例 dict 元素是:

{'name': 'service', 'priority': value}

我的任務是收集帶有鍵的字典列表,它們的鍵值“優先級”都不同。

my_list = [{'name': 'service', 'priority': 'low'}, {'name': 'service', 'priority': 'high'}]

最后應該存在一個最終的字典項,它具有最高的優先級值。 它應該像最大原則一樣工作。 在這種情況下{'name': 'service', 'priority': 'high'}將是結果。

問題是該值是一個字符串,而不是 integer。 感謝所有想法讓它發揮作用。

這是你想要的嗎?

priorities = ["low", "middle", "high", "very high"]
items = [{'name': 'service', 'priority': 'high'}, {'name': 'service2', 'priority': 'high'}, {'name': 'service', 'priority': 'very high'}, {'name': 'service2', 'priority': 'very high'}]

max_priority = max(items, key=lambda item: priorities.index(item['priority']))['priority']
max_items = [item for item in items if item['priority'] == max_priority]
print(max_items)

Output:

[{'name': 'service', 'priority': 'very high'}, {'name': 'service2', 'priority': 'very high'}]

這是使用 itertools 模塊的方法:

# Step 0: prepare data

score = ["low", "middle", "high", "very high"]
my_list = [{'name': 'service', 'priority': 'low', 'label1':'text'}, {'name': 'service', 'priority': 'middle', 'label2':'text'}, {'name': 'service_b', 'priority': 'middle'}, {'name': 'service_b', 'priority': 'very high'}]

my_list      # to just show source data in list

Out[1]:   

    [{'name': 'service', 'priority': 'low', 'label1': 'text'},
     {'name': 'service', 'priority': 'middle', 'label2': 'text'},
     {'name': 'service_b', 'priority': 'middle'},
     {'name': 'service_b', 'priority': 'very high'}]

# Step 0.5: convert bytes-string (if it is) to string  
# my_list = [{k:(lambda x: (x.decode() if type(x) == bytes else x))(v) for k,v in i.items()} for i in my_list ]

# Step 1: reorganize "score"-list on most useful way - to dict

score_dic = {i[0]:i[1] for i in list(zip(score, range(len(score))))}
score_dic

Out[2]:
    {'low': 0, 'middle': 1, 'high': 2, 'very high': 3}


# Step 2: get result 

import itertools

[max(list(g), key = lambda b: score_dic[b['priority']]) for k,g in itertools.groupby(my_list, lambda x:x['name'])]

Out[3]:
    [{'name': 'service', 'priority': 'middle', 'label2': 'text'},
     {'name': 'service_b', 'priority': 'very high'}]

暫無
暫無

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

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