簡體   English   中英

根據基於該字典中另一個鍵的值的條件,更新python詞典列表中的值

[英]Update a value in a list of dictionaries in python based on a condition based on the value of another key in that dictionary

給定詞典列表:

the_list = [{k1:v1,k2:v2}, {k1:v3, k3:v4}, {k1:v5,k2:v6},{k3:v7}]

如何基於基於k1的條件更新k2的值?

我會想出這個解決方案,但感覺不像Pythonic。 更好的解決方案嗎?

for item in the_list:
  if set([k1,k2]) <= item.keys():
    #cond evaluates to True or False
    if cond(item[k1]):
      item.update({k2:newvalue})

也許使用map或lambda表達式可以做得更好?

這是我想到的用於執行相同操作的最簡單的代碼:

my_list = [{k1:v1,k2:v2}, {k1:v3, k3:v4}, {k1:v5,k2:v6},{k3:v7}]
for my_dict in my_list:
    if all (k in my_dict for k in ("k1", "k2")):
        if cond(my_dict[k1]):
            my_dict[k2] = newvalue # possibly pre-determined 

根據cond評估k1值和/或生成newvalue方式,代碼可能會更“ Python化”。

在python中,dir(dict)向我們展示了字典的可用方法,而在dir(dict)中向我們展示了sed數據類型中是否可以使用somemethod。 因此,如果我們將其納入我們的問題中,我們可以在以下方面找到答案:

py.2.7->

['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__',\
 '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__',\
 '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__',\
 '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__',\
 '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems',\
 'iterkeys', 'itervalues','keys', 'pop', 'popitem', 'setdefault', 'update', 'values', \
'viewitems', 'viewkeys', 'viewvalues']

py.3.5->

['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__',\
 '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__',\
 '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__',\
 '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__',\
 '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems',\
 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values',\
 'viewitems', 'viewkeys', 'viewvalues']

現在,我們可以在這里看到幾件事情, poppopitemhas_key ,“得到”,而且由於詞典在Python不排序或排序(因為它不用它打印出來),我們也可以使用update

因此,首先我們需要遍歷字典和條件谷項目的低谷列表,具體取決於您的字典圖或字典理解的大小可以解決問題,或者僅使用dict.items()返回元組列表。 所以

def duDict(dictionary,codnitionElement,keyInQuesiton):
    el = dictionary.pop(keyInQuesiton) #similar as list.pop
    if condition(dictionary.get(codnitionElement)):
       el = something
       dictionary.update({keyInQuesiton:el })
    else:pass
    return dictionary

然后沿着線

condDict = lambda dict: duDict(dict,predefinedCondition,forKey)
map( condDict , listOfDicts )

希望這可以幫助

暫無
暫無

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

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