2016-07-05 175 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