【发布时间】:2021-05-24 21:27:20
【问题描述】:
在我的代码中,我尝试遍历字典列表并使用这些字典的值来创建新对象。 问题是,显然当我编写 for 循环时,它似乎直接迭代第一个字典中的元素,而不是迭代字典,我真的不明白为什么!
这是代码:
class Phase:
def __init__(self, workshop, machining, operator, placings):
self.workshop = workshop
self.machining = machining
self.operator = operator
self.placings = placings
class Part:
def __init__(self, name, phases):
self.name = name
self.phases = phases
class Loader:
def __init__(self, cycles_file, workshops_file):
self.cycles_file = cycles_file
self.workshops_file = workshops_file
self.workshops = []
cycles = {'part1': [{'workshop': 'ws1', 'machining': 10, 'operator': 0, 'placings': 2},
{'workshop': 'ws2', 'machining': 7, 'operator': 3, 'placings': 0}],
'part2': {'workshop': 'ws3', 'machining': 5, 'operator': 5, 'placings': 0}}
parts = []
for part in cycles:
print('part: ', part)
name = part
phases = []
print('cycle: ', cycles[part], type(cycles[part]))
for phase in cycles[part]:
print('phase: ', phase, type(phase))
workshop = phase.get('workshop')
machining = phase.get('machining')
operator = phase.get('operator')
placings = phase.get('placings')
phase = Phase(workshop, machining, operator, placings)
phases.append(phase)
part = Part(name, phases)
parts.append(part)
workshops = {'ws1': {'turns': 3, 'turn duration': 8},
'ws2': {'turns': 2, 'turn duration': 7.5},
'ws3': {'turns': 2, 'turn duration': 7.5}}
loader = Loader(cycles, workshops)
这是我得到的结果:
part: part1
cycle: [{'workshop': 'ws1', 'machining': 10, 'operator': 0, 'placings': 2}, {'workshop': 'ws2',
'machining': 7, 'operator': 3, 'placings': 0}]
<class 'list'>
phase: {'workshop': 'ws1', 'machining': 10, 'operator': 0, 'placings': 2}
<class 'dict'>
phase: {'workshop': 'ws2', 'machining': 7, 'operator': 3, 'placings': 0}
<class 'dict'>
part: part2
cycle: {'workshop': 'ws3', 'machining': 5, 'operator': 5, 'placings': 0}
<class 'dict'>
phase: workshop <class 'str'>
Traceback (most recent call last):
File "C:\Users\damia\PycharmProjects\logistic_management_tool\try2.py", line 42, in <module>
workshop = phase.get('workshop')
AttributeError: 'str' object has no attribute 'get'
这里的问题是这个阶段应该是一个字典,因为它是在进入for循环之前!
【问题讨论】:
-
你说的是哪个字典列表?你能想出一个更小的例子来说明同样的问题吗?
标签: python dictionary for-loop types