从字典中的<key,value>连接值(列表)

nam*_*ked 1 python python-2.7

我有格式{'string-value-keys':[list-values]}的字典.对于特定的键值,我想将该值作为字符串检索.这是一个例子:

>>> simpleDict= {'DDL_TABLE1':['create table bla', ' columns bla bla'], 'DML_TABLE1': ['insert into bla', ' values bla']}
>>> simpleDict
{'DDL_TABLE1': ['create table bla', ' columns bla bla'], 'DML_TABLE1': ['insert into bla', ' values bla']}
>>> sqlQry= " ".join(value for key, value in simpleDict.items() if 'DDL' in key)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, list found
>>> sqlQry= " ".join(value for key, value in simpleDict.items() if 'DDL' in key)
Run Code Online (Sandbox Code Playgroud)

当value是字符串值列表时,我无法理解为什么会出现此错误.

daw*_*awg 5

移动内部连接:

(' '.join(value) for key, value in simpleDict.items() if 'DDL' in key)
Run Code Online (Sandbox Code Playgroud)

测试:

>>> simpleDict= {'DDL_TABLE1':['create table bla', ' columns bla bla'], 'DML_TABLE1': ['insert into bla', ' values bla']}
>>> list(' '.join(value) for key, value in simpleDict.items() if 'DDL' in key)
['create table bla  columns bla bla']
Run Code Online (Sandbox Code Playgroud)

根据评论进行编辑

使用列表推导与生成器相比,这更容易查看.

你原来的LC:

>>> [value for key, value in simpleDict.items() if 'DDL' in key]
[['create table bla', ' columns bla bla']]
Run Code Online (Sandbox Code Playgroud)

这是创建字符串列表的列表.如果你尝试使用join:

>>> ' '.join([value for key, value in simpleDict.items() if 'DDL' in key])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, list found
Run Code Online (Sandbox Code Playgroud)

产生你看到的错误.

好的,根据您的完整数据的样子,您可以进行两次连接:

>>> ' '.join([' '.join(value) for key, value in simpleDict.items() if 'DDL' in key])
Run Code Online (Sandbox Code Playgroud)

如果你只想要一个大字符串,多个连接不是世界末日.

如果您只寻找一个项目,您可以这样做:

>>> [' '.join(value) for key, value in simpleDict.items() if 'DDL' in key][0]
'create table bla  columns bla bla'
Run Code Online (Sandbox Code Playgroud)

如果您正在处理数据/多次使用中的多次命中,请使用循环:

for s in [' '.join(value) for key, value in simpleDict.items() if 'DDL' in key]:
   # s multiple times
Run Code Online (Sandbox Code Playgroud)

如果数据是"大海捞针"类型,请使用循环并在找到所需内容后突破.