Python:如何从键值字典列表构造元组值字典?

1 投票
3 回答
3369 浏览
提问于 2025-04-16 14:11

我有一个字典列表,内容如下:

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)你感兴趣的一些测试项可能在某些字典中缺失。这些假设有点随意;如果其中有任何不对的地方,调整代码也应该不难。

撰写回答