给出一个词典列表:
$isPut= Request::isMethod('put');
if($isPut) {
//
}
如何根据基于the_list = [{k1:v1,k2:v2}, {k1:v3, k3:v4}, {k1:v5,k2:v6},{k3:v7}]
的值的条件更新k2
的值?
我会想出这个解决方案,但感觉不到Pythonic。更好的解决方案吗?
k1
使用map或lambda表达式可能可以做得更好吗?
答案 0 :(得分:2)
这是我提出的执行相同操作的最简单的代码:
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化”。
答案 1 :(得分:0)
好吧在python dir(dict)中显示了我们可用的字典方法,dir(dict)中的“somemethod”向我们展示了sed数据类型中是否有某些方法可用。因此,如果我们将其考虑在我们的问题中,我们可以将其列入:
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']
现在我们可以在这里看到几件事,pop
,popitem
,has_key
,'get',因为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 )
希望这有帮助