我有一本格式为 {'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)
当值是字符串值列表时,我无法理解为什么会出现此错误。
请您参考如下方法:
将连接移到里面:
(' '.join(value) for key, value in simpleDict.items() if 'DDL' in key)
测试:
>>> 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']
根据评论编辑
与生成器相比,列表推导式更易于查看。
作为 LC 的原件:
>>> [value for key, value in simpleDict.items() if 'DDL' in key]
[['create table bla', ' columns bla bla']]
这是创建字符串列表的列表。如果您尝试在其上使用 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
产生您看到的错误。
好的,根据你的完整数据的样子,你可以做两个连接:
>>> ' '.join([' '.join(value) for key, value in simpleDict.items() if 'DDL' in key])
如果您只想要一个大字符串,多重连接并不是世界末日。
如果您只查找一件商品,您可以这样做:
>>> [' '.join(value) for key, value in simpleDict.items() if 'DDL' in key][0]
'create table bla columns bla bla'
如果您正在处理数据/多次使用中的多次命中,请使用循环:
for s in [' '.join(value) for key, value in simpleDict.items() if 'DDL' in key]:
# s multiple times
如果数据是“大海捞针”类型,请使用循环并在找到所需内容后跳出。
