Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python将多个列表合并成多个dict?_Python_Dictionary_Attributes_Tags - Fatal编程技术网

如何使用python将多个列表合并成多个dict?

如何使用python将多个列表合并成多个dict?,python,dictionary,attributes,tags,Python,Dictionary,Attributes,Tags,很抱歉,如果这是一个相当简单的问题,我必须问这个问题,因为这个脚本的时间有限。我已经编写了一些代码,如下所示: localNames = re.findall(r"<\*\[local-name\(\)='.*?'.*?\/@\*\[name\(\)='.*?'.*?'\]", str(nontransTagsContent[0])) for i in localNames: tags = re.findall(r"local-name\(\)='(.*?)'", i) attribute

很抱歉,如果这是一个相当简单的问题,我必须问这个问题,因为这个脚本的时间有限。我已经编写了一些代码,如下所示:

localNames = re.findall(r"<\*\[local-name\(\)='.*?'.*?\/@\*\[name\(\)='.*?'.*?'\]", str(nontransTagsContent[0]))
for i in localNames:
tags = re.findall(r"local-name\(\)='(.*?)'", i)
attributes = re.findall(r"name\(\)='(.*?)'", i)
打印(属性)
的结果如下:

['tag1']
['tag2', 'tag3', 'tag4']
['tag5', 'tag6']
['attribute1', 'attribute2', 'attribute3', 'attribute4']
['attribute5', 'attribute6']
['attribute7', 'attribute8', 'attribute9']
我希望得到的结果是字典,如:

{'tag1':['attribute1', 'attribute2', 'attribute3','attribute4'}
{'tag2':['attribute5', 'attribute6']}
{'tag3':['attribute5', 'attribute6']}
{'tag4':['attribute5', 'attribute6']}
{'tag5':['attribute7', 'attribute8', 'attribute9']}
{'tag6':['attribute7', 'attribute8', 'attribute9']}
我认为通过这种方式,我可以轻松地操作数据,因为我可以提取数据并将其写入其他形式。下面是我尝试的代码:

for x in tags:
    dict = zip(tags, attributes)
    print (list(dict))
但结果似乎并不正确。请你帮我看一下,看看如何解决这个问题…非常感谢

tags=[ 
    ['tag1'],
    ['tag2', 'tag3', 'tag4'],
    ['tag5', 'tag6'],
  ]

  attributes=[
              ['attribute1', 'attribute2', 'attribute3', 'attribute4'],
              ['attribute5', 'attribute6'],
              ['attribute7', 'attribute8', 'attribute9'],
            ]

  for idx, tag_line in enumerate(tags):
    for tag in tag_line:
      print {tag : attributes[idx]}
输出:

{'tag1': ['attribute1', 'attribute2', 'attribute3', 'attribute4']}
{'tag2': ['attribute5', 'attribute6']}
{'tag3': ['attribute5', 'attribute6']}
{'tag4': ['attribute5', 'attribute6']}
{'tag5': ['attribute7', 'attribute8', 'attribute9']}
{'tag6': ['attribute7', 'attribute8', 'attribute9']}
{'tag1': ['attribute1', 'attribute2', 'attribute3', 'attribute4']}
{'tag4': ['attribute5', 'attribute6'], 'tag2': ['attribute5', 'attribute6'], 'tag3': ['attribute5', 'attribute6']}
{'tag5': ['attribute7', 'attribute8', 'attribute9'], 'tag6': ['attribute7', 'attribute8', 'attribute9']}
如果你想,dict将所有标签都放在一个列表中

  from itertools import repeat
  for tag, attr in zip(tags,attributes):
    print dict(zip(tag, repeat(attr,len(tag))))
输出:

{'tag1': ['attribute1', 'attribute2', 'attribute3', 'attribute4']}
{'tag2': ['attribute5', 'attribute6']}
{'tag3': ['attribute5', 'attribute6']}
{'tag4': ['attribute5', 'attribute6']}
{'tag5': ['attribute7', 'attribute8', 'attribute9']}
{'tag6': ['attribute7', 'attribute8', 'attribute9']}
{'tag1': ['attribute1', 'attribute2', 'attribute3', 'attribute4']}
{'tag4': ['attribute5', 'attribute6'], 'tag2': ['attribute5', 'attribute6'], 'tag3': ['attribute5', 'attribute6']}
{'tag5': ['attribute7', 'attribute8', 'attribute9'], 'tag6': ['attribute7', 'attribute8', 'attribute9']}
其他请求:

tags, attributes = [], []
for i in localNames:
  tags.append(re.findall(r"local-name\(\)='(.*?)'", i))
  attributes.append(re.findall(r"name\(\)='(.*?)'", i))
输出:

{'tag1': ['attribute1', 'attribute2', 'attribute3', 'attribute4']}
{'tag2': ['attribute5', 'attribute6']}
{'tag3': ['attribute5', 'attribute6']}
{'tag4': ['attribute5', 'attribute6']}
{'tag5': ['attribute7', 'attribute8', 'attribute9']}
{'tag6': ['attribute7', 'attribute8', 'attribute9']}
{'tag1': ['attribute1', 'attribute2', 'attribute3', 'attribute4']}
{'tag4': ['attribute5', 'attribute6'], 'tag2': ['attribute5', 'attribute6'], 'tag3': ['attribute5', 'attribute6']}
{'tag5': ['attribute7', 'attribute8', 'attribute9'], 'tag6': ['attribute7', 'attribute8', 'attribute9']}
如果你想,dict将所有标签都放在一个列表中

  from itertools import repeat
  for tag, attr in zip(tags,attributes):
    print dict(zip(tag, repeat(attr,len(tag))))
输出:

{'tag1': ['attribute1', 'attribute2', 'attribute3', 'attribute4']}
{'tag2': ['attribute5', 'attribute6']}
{'tag3': ['attribute5', 'attribute6']}
{'tag4': ['attribute5', 'attribute6']}
{'tag5': ['attribute7', 'attribute8', 'attribute9']}
{'tag6': ['attribute7', 'attribute8', 'attribute9']}
{'tag1': ['attribute1', 'attribute2', 'attribute3', 'attribute4']}
{'tag4': ['attribute5', 'attribute6'], 'tag2': ['attribute5', 'attribute6'], 'tag3': ['attribute5', 'attribute6']}
{'tag5': ['attribute7', 'attribute8', 'attribute9'], 'tag6': ['attribute7', 'attribute8', 'attribute9']}
其他请求:

tags, attributes = [], []
for i in localNames:
  tags.append(re.findall(r"local-name\(\)='(.*?)'", i))
  attributes.append(re.findall(r"name\(\)='(.*?)'", i))

如果显式创建字典,则可以更轻松、更清楚地执行此操作
zip
不会创建字典

tags = [
    ['tag1'],
    ['tag2', 'tag3', 'tag4'],
    ['tag5', 'tag6']
]

attributes = [
    ['attribute1', 'attribute2', 'attribute3', 'attribute4'],
    ['attribute5', 'attribute6'],
    ['attribute7', 'attribute8', 'attribute9']
]

dict_list = []
for t_list, a_list in zip(tags, attributes):
    for t in t_list:
        dict_list.append({t: a_list})
        print(dict_list[-1])

如果显式创建字典,则可以更轻松、更清楚地执行此操作
zip
不会创建字典

tags = [
    ['tag1'],
    ['tag2', 'tag3', 'tag4'],
    ['tag5', 'tag6']
]

attributes = [
    ['attribute1', 'attribute2', 'attribute3', 'attribute4'],
    ['attribute5', 'attribute6'],
    ['attribute7', 'attribute8', 'attribute9']
]

dict_list = []
for t_list, a_list in zip(tags, attributes):
    for t in t_list:
        dict_list.append({t: a_list})
        print(dict_list[-1])

您可以通过应用嵌套的
贴图来实现这一点:

map(
    lambda x: map(
        lambda y: {y: attributes[x[0]]},
        x[1]
    ), 
    enumerate(tags)
) 

您可以通过应用嵌套的
贴图来实现这一点:

map(
    lambda x: map(
        lambda y: {y: attributes[x[0]]},
        x[1]
    ), 
    enumerate(tags)
) 
一艘班轮:

guten_tag = { tag: attributes[i] for i, tag_group in enumerate(tags) for tag in tag_group}
确保有一个名为
标记
的列表和一个名为
属性
的列表,如其他示例中所示

tags = [
    ['tag1'],
    ['tag2', 'tag3', 'tag4'],
    ['tag5', 'tag6']
]

attributes = [
    ['attribute1', 'attribute2', 'attribute3', 'attribute4'],
    ['attribute5', 'attribute6'],
    ['attribute7', 'attribute8', 'attribute9']
]  
速度比较:

galaxy\u一个
答案是
1.05µs/圈
at
1000000圈
使用
timeit
模块

jeremy
答案是
1.21µs
at
1000000个循环
使用
timeit
模块

guten_标签
(此方法)在
1000000个循环时,使用
timeit
模块,每个循环的
850纳秒

其中
µs
10^-6
nano
10^-9

在非常肤浅的层面上,这将使您的性能提高2-3个数量级

一个班轮:

guten_tag = { tag: attributes[i] for i, tag_group in enumerate(tags) for tag in tag_group}
确保有一个名为
标记
的列表和一个名为
属性
的列表,如其他示例中所示

tags = [
    ['tag1'],
    ['tag2', 'tag3', 'tag4'],
    ['tag5', 'tag6']
]

attributes = [
    ['attribute1', 'attribute2', 'attribute3', 'attribute4'],
    ['attribute5', 'attribute6'],
    ['attribute7', 'attribute8', 'attribute9']
]  
速度比较:

galaxy\u一个
答案是
1.05µs/圈
at
1000000圈
使用
timeit
模块

jeremy
答案是
1.21µs
at
1000000个循环
使用
timeit
模块

guten_标签
(此方法)在
1000000个循环时,使用
timeit
模块,每个循环的
850纳秒

其中
µs
10^-6
nano
10^-9



在非常肤浅的层面上,这将使您的性能提高2-3个数量级

每行的标记和属性是否保证唯一?换句话说,
'attribute1'
是否只会出现在第1行?请发布您的
本地名称
内容这是个好问题。我认为标签应该是唯一的,但是属性可能不是。Hi@RomanPerekhrest我添加了代码。每行的标签和属性保证是唯一的吗?换句话说,
'attribute1'
是否只会出现在第1行?请发布您的
本地名称
内容这是个好问题。我认为标签应该是唯一的,但属性可能不是。Hi@RomanPerekhrest我添加了代码谢谢你的回答-我可以问一下如何让标签和属性像你的例子一样成为一个列表吗?现在我得到的打印标记与我在问题中显示的一样……在我的示例中,标记和属性存储在名为
dicts
的列表中。我将其重命名为
dict_list
,以便更清晰。谢谢您的回答-我可以问一下如何使标记和属性成为一个类似您示例的列表吗?现在我得到的打印标记与我在问题中显示的一样……在我的示例中,标记和属性存储在名为
dicts
的列表中。我将其重命名为
dict_list
,以便更清晰。谢谢您的回答-我可以问一下如何使标记和属性成为一个类似您示例的列表吗?现在我得到的打印标签就像我在问题中展示的一样..嗨@galaxyan非常感谢!很有希望!我尝试了其他请求代码,发现如果我打印属性,它会打印出几个单独的列表,最后一个列表会打印出所有内容,这就是我们需要的/与您的示例相同。我想知道如何只打印出我们现在需要的…对不起,我的错!我找到了我得到那个结果的原因。请忽略我的最后一条消息。它现在工作得很好!非常感谢。那我就把这个作为答案。但我明天会尝试阅读/理解代码,因为现在有点晚了,如果我有任何问题,我可以明天再给你回复吗?@Penny当然,让我知道谢谢你的回答-我可以问一下如何像你的例子一样将标签和属性列成一个列表吗?现在我得到的打印标签就像我在问题中展示的一样..嗨@galaxyan非常感谢!很有希望!我尝试了其他请求代码,发现如果我打印属性,它会打印出几个单独的列表,最后一个列表会打印出所有内容,这就是我们需要的/与您的示例相同。我想知道如何只打印出我们现在需要的…对不起,我的错!我找到了我得到那个结果的原因。请忽略我的最后一条消息。它现在工作得很好!非常感谢。那我就把这个作为答案。但我明天会尝试阅读/理解代码,因为现在有点晚了,如果我有任何问题,我可以明天给你回复吗?@Penny当然,让我知道我已经试过运行这个,它给我
TypeError:()缺少一个必需的位置参数:“x”
@Conic更新了答案。期待您对此解决方案的性能评估!我试图将其重新表述为一个接受attribute的函数