[英]Return dictionary value as tuple or list from a string
我有一個很長的字符串,我正在逐行讀取文件。我正在嘗試將行轉換為字典並嘗試檢查給定的字典鍵值是否存在,它必須返回true。
例:
>>> data
'Xyz pqrs,uvw'
>>> dict(line.split(',') for line in data.strip().splitlines())
{'Xyz pqrs': 'uvw'}
這是我得到的輸出
預期結果:
在元組中
{'Xyz' : ('pqrs','uvw')}
或列表
{'Xyz' : ['pqrs','uvw']}
如果data.values()中存在'pqrs',則必須打印“是”
>>> data2
{'Xyz': ['pqrs', 'uvw']}
>>>
>>> if 'pqrs' in (d for d in data2.values()):
... print "yes"
...
>>> if 'pqrs' in data2.values():
... print "yes"
...
我嘗試了兩種方式,但沒有從輸出中得到任何東西。
任何提示都會有所幫助。
您可以使用嵌套字典理解來創建字典:
>>> 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()))
你必須澄清你的規則。 但是從你向我們展示的這個正則表達式應該做的工作
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.