Python 来自<;的连接值(列表);关键、价值>;字典里

Python 来自<;的连接值(列表);关键、价值>;字典里,python,python-2.7,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': ['c

我有一本{'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)
>>simpleDict={'DDL_TABLE1':['create table bla','columns bla'],'DML_TABLE1':['insert into bla','values bla']}
>>>简单法令
{'DDL_TABLE1':['create table bla','columns bla'],'DML_TABLE1':['insert into bla','values bla']}
>>>sqlQry=”“.join(键的值,如果键中有“DDL”,则simpledit.items()中的值)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:序列项0:应为字符串,找到列表
>>>sqlQry=”“.join(键的值,如果键中有“DDL”,则simpledit.items()中的值)
当value是字符串值列表时,我无法理解为什么会出现此错误。

将连接移到内部:

(' '.join(value) for key, value in simpleDict.items() if 'DDL' in key)
测试:

根据评论进行编辑

使用列表理解与生成器相比,这更容易查看

您的信用证原件:

>>> [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(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
如果数据是“大海捞针”类型,那么在找到要查找的内容后,使用循环和中断

将连接移动到内部:

(' '.join(value) for key, value in simpleDict.items() if 'DDL' in key)
测试:

根据评论进行编辑

使用列表理解与生成器相比,这更容易查看

您的信用证原件:

>>> [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(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
如果数据是“大海捞针”类型,那么在找到要查找的内容后,使用循环和中断

“”.join()
需要一个iterable字符串,而您的生成器会生成字符串列表,因此您将以类似于
“”的调用结束。join([[['create table bla','columns bla']])

因为看起来您只希望匹配一个键,所以您可能不希望为此使用生成器。我建议如下:

sqlQry = None
for key, value in simpleDict.items():
    if 'DDL' in key:
        sqlQry = " ".join(value)
        break
“”.join()
需要一个字符串的iterable,而您的生成器会生成字符串列表,因此您将以类似于
“”的调用结束。join([['create table bla','columns bla']])

因为看起来您只希望匹配一个键,所以您可能不希望为此使用生成器。我建议如下:

sqlQry = None
for key, value in simpleDict.items():
    if 'DDL' in key:
        sqlQry = " ".join(value)
        break

也许您想加入值的结果:

In [11]: sqlQry= " ".join(''.join(value) for key, value in simpleDict.items() if 'DDL' in key)

In [12]: sqlQry
Out[12]: 'create table bla columns bla bla'
目前,您正试图加入一系列列表

[13]中的
:''.join([['a','b']]
TypeError回溯(最近一次调用上次)
在()
---->1“”。加入(['a','b']])
TypeError:序列项0:应为字符串,找到列表

也许您想加入值的结果:

In [11]: sqlQry= " ".join(''.join(value) for key, value in simpleDict.items() if 'DDL' in key)

In [12]: sqlQry
Out[12]: 'create table bla columns bla bla'
目前,您正试图加入一系列列表

[13]中的
:''.join([['a','b']]
TypeError回溯(最近一次调用上次)
在()
---->1“”。加入(['a','b']])
TypeError:序列项0:应为字符串,找到列表

该死!!我很困惑。非常感谢。是否可以使用concatenated字符串值而不是list值。我正试图避免做另一个
“”。join(list(“”.join(value)表示键,value表示simpledit.items(),如果键中的'DDL'表示值))
该死!!我很困惑。非常感谢。是否可以使用concatenated字符串值而不是list值。我正在尝试避免执行另一个
“”。join(list(“”.join(value)表示键,value表示simpledit.items(),如果键中的'DDL'表示值))