我有一个迭代器对象,然后在进行迭代时,它的每个项目属性都会对时间和值产生兴趣
[(point.time, point.value) for point in control_points]
[(Fraction(-1, 23), Fraction(0, 1)), (Fraction(24, 23), Fraction(100, 1))]
时间和值都是Fraction
对象
现在我必须构建一个数据结构,其映射方式是第一个元组是具有in_time dict的元组,第二个元组是out_time dict的
({'in_time': "" , 'in_value': ""} , {'out_time': "", 'out_value': ""})
我还尝试过使用清单这样的方式进行其他尝试:
container = [['in_time', 'in_value'] , ['out_time', 'out_value']]
dict(zip([objects for objects in container, [(point.time, point.value) for point in contol_points]]))
Traceback (most recent call last):
File "<console>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 1; 2 is required
答案 0 :(得分:0)
忽略分数并使用整数显示一种方法:
给予
control_points = [point(-1, 0), point(24, 100)]
container = [['in_time', 'in_value'] , ['out_time', 'out_value']]
通知
{ container[0][0]:control_points[0].time, container[0][1] : control_points[0].value }
给予
{'in_time': -1, 'in_value': 0}
因此,这是第一个项目。
如果您像这样枚举container
:
[{ c[0]:control_points[i].time, c[1] : control_points[i].value } for i,c in enumerate(container)]
您得到了:
[{'in_time': -1, 'in_value': 0}, {'out_time': 24, 'out_value': 100}]
这似乎确实在两点上,但是显示了如何进行字典压缩和枚举。
答案 1 :(得分:0)
这是我的尝试:
我使用zip中的*迭代器来访问两个列表,但是顺序不正确,因此我需要再次循环以调整顺序。
#!/usr/bin/python3
'''
Description:
Merge PDF files in to 1 pdf file in source directory.
'''
import os
import sys
try:
from PyPDF2 import PdfFileMerger
except ImportError as missingModule:
print('could not import PyPDF2', missingModule)
def checkType(arg):
# check if given argument is a directory
if os.path.isdir(arg[1]):
# distil the source path
arg = str(arg[1])
# create a list with only pdf files
pdf_files = [os.path.join(arg, f) for f in os.listdir(arg) if f.endswith('pdf')]
src_loc = arg
return pdf_files, src_loc
# if arguments are pdf files, distil source folder and pdf files
src_loc = os.path.split(sys.argv[1])[0]
pdf_files = sys.argv[1:]
return pdf_files, src_loc
def pdfMerger(args):
files = args[0]
loc = args[1]
merger = PdfFileMerger(strict=False)
for pdf in files:
try:
merger.append(open(pdf, 'rb'))
except Exception as E:
input(E)
with open(loc + '/combined_pdf.pdf', 'wb') as pdf_out:
merger.write(pdf_out)
if __name__ == '__main__':
if len(sys.argv) < 1:
print('Usage: Python PFM.py [directory] / [file, file, etc.]')
pdfMerger(checkType(sys.argv))
对于Python 2:
from fractions import Fraction
container = [['in_time', 'in_value'] , ['out_time', 'out_value']]
control_points = [(Fraction(-1, 23), Fraction(0, 1)), (Fraction(24, 23), Fraction(100, 1))]
zipped_list = list(zip(*container,*control_points))
new_dict={}
i=0
for element in zipped_list:
while((i+3)<=len(element)):
print([element[i]], element[i+2])
new_dict[element[i]]=element[i+2]
i+=1
i=0
print(new_dict)