python:按键搜索嵌套列表并将其存储到嵌套列表中

2024-04-16 19:27:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个嵌套列表,如:

list1 = [(A,0.75),(D,0.49),(Y,0.36)]

我有一个参考嵌套列表,如:

mainlist = [(A,10),(B,20),(C,30),(D,40),(E,50).........,(Y,250),(Z,260)]
  1. 我想在mainlist中搜索关键字A。你知道吗
  2. 在mainlist中找到一个后,将相应的键、值对存储在一个新的嵌套列表中。你知道吗
  3. 对D和Y重复1和2。(列表1中的所有元素)

我希望输出为:

newlist = [(A,1),(D,4),(Y,250)]

Tags: 元素列表关键字list1newlistmainlist
2条回答

请注意,在他的(相当漂亮的)解决方案中使用的set@Sait是一个由唯一项组成的无序数据结构:

  • 无序的:意味着您不能安全地假设键的顺序仍然是集合中的'A', 'D', 'Y'。你知道吗
  • 唯一的:这意味着如果您有重复的键,比如'A', 'D', 'Y', 'A',那么只有'A', 'D', 'Y'会出现在您的输出中,因为每个项在一个集合中只能出现一次。你知道吗

也就是说,使用字典而不是元组列表进行查找可以为自己省去一些麻烦。你知道吗

>>> list1 = [('A',0.75),('D',0.49),('Y',0.36),('D',0.49)]
>>> maindict = dict({'A':10, 'B':20, 'C':30, 'D':40, 'E':50, 'Y':250, 'Z':260})

>>> keys, values = zip(*list1) # unzip the tuples in list one into two separate lists
>>> newlist = [(key, maindict[key]) for key in keys]
>>> print(newlist)
[('A', 10), ('D', 40), ('Y', 250), ('D', 40)]

此解决方案保证保留输入的顺序,并且可以处理重复的键。通过使用字典,您不需要遍历整个mainlist来查找密钥。您可以对键进行迭代,并通过对每个键进行一次字典查找(这相当快)来获取它们的值。你知道吗

你在找这样的东西吗:

list1 = [('A',0.75),('D',0.49),('Y',0.36)]
mainlist = [('A',10),('B',20),('C',30),('D',40),('E',50),('Y',250),('Z',260)]

keys = {k[0] for k in list1} # create a set with keys from list1
newlist = [k for k in mainlist if k[0] in keys] # get items from mainlist with good keys 
print(newlist)

输出:

[('A', 10), ('D', 40), ('Y', 250)]

相关问题 更多 >