对于字典,将键和值与列表中的值进行比较

我具有以下结构:

prev = { 'alpha:10.2': '145','teta:180': '198','eltira:140': '222','ronta:23.14':220}
now = ['alpha:10.3','teta:180','eltira:142']

和以下代码:

   old = []
    for k,v in prev.iteritems():
     if k not in now:
       old.append(v)

因此,如果在列表prev中找不到字典now的密钥,则将值添加到old列表中。

结果'old = ['145','222']`

但是,我还要检查键中哪个部分不对应。我倾向于使用namedtuple。

Package = collections.namedtuple('Package','name version')

for k,v in prev.items():
  name,version = k.split(':')
  Package(name=k,version='v')
  1. 如果name对应但version不对应,请执行上述相同的操作。
  2. 如果未找到name,请将其添加到新列表old_names中,也可以按照上述操作进行。

问题是if k not in now无法正常工作。我可以用两个循环和三个ifs来做到这一点,但是也许有一个选择可以使它更干净。

期望输出:

old=[ '145','222'] old_names=['ronta']

yanyantianlong 回答:对于字典,将键和值与列表中的值进行比较

  

我已经拆分了“现在”列表,并将其转换为需要一次迭代的字典(名称:版本)。以后,可以在恒定时间内访问字典中的值以进行进一步的操作。

prev = { 'alpha:10.2': '145','teta:180': '198','eltira:140': '222','old:1. 43':'150'}
now = ['alpha:10.3','teta:180','eltira:142']

now_dict = {}
old = []
old_names = []

for items in now:
  temp0,temp1 = items.split(':')
  now_dict[temp0] = temp1

for k,v in prev.items():
   name,version = k.split(':')
   if name not in now_dict.keys():
      old_names.append(name)
      old.append(v)
      continue

   if version != now_dict[name]:
      old.append(v)
      continue

   else:
     continue

if __name__ == '__main__':
  print(old_names)
  print(old)
,

这是一种实现方法:

prev = { 'alpha:10.2': '145','zeta:12.1' : '334'}
now = ['alpha:10.3','eltira:142']

now_splited = [nk.split(":") for nk in now]

old = []
old_name = []
for k,v in prev.items():
    if k not in new_key:
        old_n,old_v = k.split(":")
        name = any(map(lambda n : n[0] == old_n,now_splited))
        version = any(map(lambda n : n[1] == old_v,now_splited))
        if name and not version:
            old.append(v)
        elif not name:
            old_name.append(old_n
            old.append(old_v))

结果:

>>> print(old,old_name)
['145','222','334'] ['zeta']
,

您可以通过nowmap放入operator.methodcaller并将其包装在dict()中来使splitter = operator.methodcaller('split',':') now_dict,kv_map = dict(map(splitter,now)),map(splitter,prev) old = [prev[':'.join((k,v))] for k,v in kv_map if k in now_dict] old_names = [n for n,v in kv_map if n not in now_dict] 成为字典,然后使用与上一条相同的方法进行理解很容易:

#old
['145','198','222']
#old_names
[]

结果:

 function GetYouTubeId($url)
 {
 preg_match('%(?:youtube(?:-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i',$url,$match);
 $youtube_id = $match[1];
 return $youtube_id;
 }
本文链接:https://www.f2er.com/3143119.html

大家都在问