【问题标题】:How to search key from key-value pair in python如何在python中从键值对中搜索键
【发布时间】:2014-05-26 13:01:59
【问题描述】:

我已经编写了从我的计算机创建文件的键值对并将它们存储在列表a 中的代码。这是代码:

groups = defaultdict(list)
with open(r'/home/path....file.txt') as f:
    lines=f.readlines()
    lines=''.join(lines)
    lines=lines.split()
    a=[]
    for i in lines:
        match=re.match(r"([a,b,g,f,m,n,s,x,y,z]+)([-+]?[0-9]*\.?[0-9]+)",i,re.I)
        if match:
            a.append(match.groups())
print a

现在我想查找特定键是否在该列表中。例如,我的代码生成以下输出:

[('X', '-6.511'),('Y', '-40.862'), 
('X', '-89.926'),('N', '7304'),
('X', '-6.272'), ('Y', '-40.868'), 
('X', '-89.979'),('N', '7305'),
('Y', '-42.101'),('Z', '238.517'),
('N', '7306'),   ('Y','-43.334'), 
('Z', '243.363'),('N', '7307')]

现在,在输出中的键是'X''Y''Z''N' 但我正在寻找的键是ABGFMNSXYZ。所以对于那些不在输出中的键,输出应该显示类似"A not in list""B not in list"

【问题讨论】:

  • 向我们展示您的尝试。
  • 如果要匹配逗号,[a,b,g,f,m,n,s,x,y,z]+相当于[,abgfmnsxyz]+,如果不想要逗号,则应该是:[abgfmnsxyz]+
  • 我不要逗号。我希望输出为“A不在列表中”,如果这些不在列表中,其他人也一样...我对此一无所知..

标签: python arrays list dictionary


【解决方案1】:

您可以将元组列表读取为 dict 并检查键是否存在:

d=[('X', '-6.511'),('Y', '-40.862'), 
('X', '-89.926'),('N', '7304'),
('X', '-6.272'), ('Y', '-40.868'), 
('X', '-89.979'),('N', '7305'),
('Y', '-42.101'),('Z', '238.517'),
('N', '7306'),   ('Y','-43.334'), 
('Z', '243.363'),('N', '7307')]

k=['A', 'B', 'G', 'F', 'M', 'N', 'S', 'X', 'Y', 'Z']
dt=dict(d)
for i in k:
    if i in dt:
        print i," has found"
    else:
        print i," has not found"

输出:

A  has not found
B  has not found
G  has not found
F  has not found
M  has not found
N  has found
S  has not found
X  has found
Y  has found
Z  has found

【讨论】:

  • 你为什么每次都创建一个新的字典?
【解决方案2】:
mylist = [('X', '-6.511'),('Y', '-40.862'), 
('X', '-89.926'),('N', '7304'),
('X', '-6.272'), ('Y', '-40.868'), 
('X', '-89.979'),('N', '7305'),
('Y', '-42.101'),('Z', '238.517'),
('N', '7306'),   ('Y','-43.334'), 
('Z', '243.363'),('N', '7307')]

missing = [ x for x in 'ABGFMNSXYZ' if x not in set(v[0] for v in mylist) ]
for m in missing:
    print "{} not in list".format(m)

给予:

A not in list
B not in list
G not in list
F not in list
M not in list
S not in list

【讨论】:

    【解决方案3】:
    for node in ['A', 'B', 'G', 'F', 'M', 'N', 'S', 'X', 'Y', 'Z']:
        if node not in groups.keys():
            print "%s not in list"%(node)
    

    在遍历列表时使用变量和打印函数

    我想这就是你想要的。

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 2012-03-29
      • 1970-01-01
      • 2015-06-07
      • 2017-10-23
      • 2015-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多