Python:如何从键值字典列表构造元组值字典?
我有一个字典列表,内容如下:
lst = [{'unitname':'unit1', 'test1': 2, 'test2': 9}, {'unitname':'unit2', 'test1': 24, 'test2': 35}]
我想把它们合并成一个字典,像这样:
dictA = { ('unit1','test1'): 2, ('unit1','test2'): 9, ('unit2','test1'):24, ('unit2','test2' : 35 }
`
我有所有的单元名称和测试名称在一个列表里:
unitnames = ['unit1','unit2']
testnames = ['test1','test2']
我尝试过,但有些单元的测试漏掉了。
dictA = {}
for unit in unitnames:
for dict in lst:
for k,v in dict.items():
dictA[unit,k] = v
有什么建议吗?谢谢。
3 个回答
2
你可以试试:
dictA = {}
for l in lst:
name = l.pop('unitname')
for test in l:
dictA[name, test] = l[test]
这个和Gareth的解决方案是同时发布的,假设条件也一样,不过这样做不会给你额外的项(name, 'unitname')= name
Marcelo Cantos的解决方案很优雅,但对我们这些普通人来说,理解起来会简单一些,像这样:
dict( ((d['unitname'], k), t)
for d in lst
for (k, t) in d.iteritems()
if k != 'unitname'
)
2
在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在程序中使用这些数据。这个过程就像是从冰箱里拿食材,然后用这些食材做饭。
有些时候,我们会遇到一些问题,比如数据的格式不对,或者数据丢失了。这就像是你打开冰箱,发现食材坏掉了,或者根本没有你想要的食材。
为了避免这些问题,我们可以使用一些工具和方法来检查和处理数据。就像在做饭之前,先检查一下冰箱里的食材是否新鲜,是否足够。
总之,处理数据就像做饭一样,需要仔细检查和准备,才能做出美味的菜肴。
dict(((d['unitname'], k), t)
for d in lst
for (k, t) in d.iteritems()
if k != 'unitname')
1
dictA = {}
for d in lst:
unit = d['unitname']
for test in testnames:
if test in d:
dictA[unit,test] = d[test]
我假设(1)你列表里的所有字典都有一个叫 unitname
的键,(2)这个键的值总是你感兴趣的某个单位,(3)列表中的一些字典可能包含你不感兴趣的测试项,以及(4)你感兴趣的一些测试项可能在某些字典中缺失。这些假设有点随意;如果其中有任何不对的地方,调整代码也应该不难。