我有以下功能:
def create_list_from_dict1(mydict):
output = []
for k, v in openint_dict.items():
output.append( (k, v['field1'], v['field2'], v['field3']) )
return output
基本上,它会使字典变平,这样我就可以在返回列表中的元组的一个字段上执行排序。
我不喜欢这样一个事实,即我必须使用“硬编码”。值字典的字段名称('field1'
,...,'fieldN'
),我想要一个更加pythonic和优雅的方式来执行此操作,以便此函数适用于包含固定结构的所有字典(非嵌套)字典作为其值。
我想我必须使用**kwargs
和/或lambda
函数,以及列表理解。写这个函数的最pythonic方法是什么?
答案 0 :(得分:3)
此可能会解决您的问题:
def create_list_from_dict1(mydict):
return [
(key,) + tuple(v for _, v in sorted(val.items()))
for key, val in sorted(mydict.items())
]
这假定:
key
需要sorted
}; 注意在内部循环和外部循环中使用.items
来按键排序(两个元组在第一个元素上排序,第二个元素仅用于断开关系)和传统的{{1} 的标识符"我们不再使用它" 。
使用中:
_
答案 1 :(得分:2)
你可以这样做:
fields = ("field1", "field2", "field3")
output = [[k] + [mydict[k].get(x) for x in fields] for k in mydict]
在该代码中,我们迭代dict键并使用选定的二级词典值子集添加它们。
答案 2 :(得分:0)
如果订单无关紧要......
def create_list_from_dict1(mydict):
output = []
for k, v in openint_dict.items():
fields = [value for key, value in v.items()]
output.append( tuple([k] + fields )
return output
如果订单有问题,您需要按照惯例进行操作并专门调出字段...或者您需要使用OrderedDict
作为子字符。
答案 3 :(得分:0)
Python dict
有keys()
和values()
方法来获取键和值的列表。如果字段的顺序不重要:
[(k,) + tuple(v.values()) for k, v in mydict]
如果值的排序很重要:
[(k,) + tuple([v[i] for i in sorted(v.keys())]) for k, v in mydict]
请注意,第二个选项与没有调用sorted()
的第一个选项相同。订单取决于如何将内容添加到子文档中,因此您应尽可能使用第二个选项。
答案 4 :(得分:0)
def create_list_from_dict1(mydict):
return [tuple([k]+list(v.values())) for k,v in openint_dict.items()]
不使用字段'命名并产生相同的结果。
在Python 3.5中,您只需输入(因为在任何地方都允许加星标表达式):
def create_list_from_dict1(mydict):
return [(k,*v.values()) for k,v in openint_dict.items()]
答案 5 :(得分:0)
我认为这是pythonic:
// ...
import { doSomethingWithData } from './someModule'
// ...
axios.post(url + '/qget?sub=' + sub)
.then(data => {
console.log(data)
doSomethingWithData(data)
})
.catch(err => console.log(err));
// ...