簡體   English   中英

將字典值作為元組或字符串列表返回

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM