2016-07-05 122 views
3

我有一个长字符串,我正在从一个文件行中读取行。我试图将行转换为字典并尝试检查给定是否存在字典键值必须返回true。从字符串返回字典值作为元组或列表

实施例:

>>> data 
'Xyz   pqrs,uvw' 
>>> dict(line.split(',') for line in data.strip().splitlines()) 
{'Xyz   pqrs': 'uvw'} 

这是我

输出预期结果:

在元组

{'Xyz' : ('pqrs','uvw')} 

或列表

{'Xyz' : ['pqrs','uvw']} 

并且如果“PQRS”出现在data.values()它必须打印“是”

>>> data2 
    {'Xyz': ['pqrs', 'uvw']} 
    >>> 


    >>> if 'pqrs' in (d for d in data2.values()): 
    ... print "yes" 
    ... 

    >>> if 'pqrs' in data2.values(): 
    ...  print "yes" 
    ... 

我试用过的方法,但并没有得到来自任何输出。

任何提示将是有益的。

回答

4

可以创建字典,嵌套字典的理解:

>>> data = """Xyz   pqrs,uvw 
... Abc    foo,bar,blub""" 
>>> d = {key: values.split(",") for key, values in 
      (line.split() for line in data.splitlines())} 
>>> d 
{'Xyz': ['pqrs', 'uvw'], 'Abc': ['foo', 'bar', 'blub']} 

然后用any检查遏制:

>>> any("pqrs" in v for v in d.values()) 
True 

更新:由于您似乎在使用Python 2.6之前,存在dict-comprehensions,你必须使用这个等效的表格:

>>> d = dict((key, values.split(",")) for key, values in 
      (line.split() for line in data.splitlines())) 
+0

我得到无效的语法? >>> d = {key:values.split(“,”)for key,data.splitlines()中line.split()中的值)} 文件“”,第1行 d = {key :键值values.split(“,”),data.splitlines()中line.split()中的值} ^ SyntaxError:无效的语法 –

+0

您使用的是什么版本的Python? Dict-Comprehensions在Python 2.7左右是新的(即不是新增功能)。或者,尝试'dict((key,values.split(“,”))...)' –

+0

我正在使用python 2.6。谢谢,我知道了 –

0

你必须澄清你的规则。但是,从你已经证明我们这个正则表达式应该做的工作

import re 
pattern = re.compile(r'[\s,]*') 
result = {} 
for line in data.strip().splitlines(): 
    parts = pattern.split(line) 
    key = parts[0] 
    values = parts[1:] 
    if 'pqrs' in values: 
     print 'yes' 
    result[key] = values