0

下面的代码从文本文件(包含不同的数组)中读取并分解为单独的元素。我让它与具有两个子项的数组一起正常工作,但不是第三个。

例如 - 此文件工作正常:

('January', 2, [('curly', 30), ('larry',10), ('moe',20)])

.

staff = dict()

for item in filecontent:
    month = filecontent[0]
    section = filecontent[1]

    for name, hours in filecontent[2]:
        staff[name] = hours

print ("month:" + month)
print ("section: " + str (section))

print ("".join("%s has worked %s hours\n" % (name, hours) for name, hours in staff.items()))

overtime = int(input ("Enter overtime figure: "))

print ("".join("%s has now worked %s hours \n" % (name, (hours + overtime)) for name, hours in staff.items()))

但是我有一个不同的月份,其中包含第三个数组元素(奖金数字),例如:

('February', 2, [('curly', 30, **10**), ('larry',10, **10** ), ('moe',20, **10**)])

我在调整上述代码的尝试如下,但没有工作......

staff = dict()

for item in filecontent:
    month = filecontent[0]
    section = filecontent[1]

    for name, hours, bonus in filecontent[2]:
        staff[name] = hours, bonus

print ("month:" + month)
print ("section: " + str (section))

print ("".join("%s has worked %s hours with %s bonus \n" % (name, hours, bonus) for name, hours, bonus in staff.items()))
4

2 回答 2

3

当你这样做时:

staff[name] = hours, bonus

您正在创建一个元组:

>>> staff = {}
>>> hours = 40
>>> bonus = 10
>>> name = 'john'
>>> staff[name] = hours,bonus
>>> staff[name]
(40, 10)

所以当你这样做时staff.items(),结果是[('john', (40, 10))]. 要打印这个:

print(''.join('{0} has worked {1} hours with {2} bonus'.format(x, *y) for x,y in staff.items()))

*y展开的(分解的)元组传递给 format 函数,然后将其映射到第二个和第三个参数。

于 2013-08-07T19:15:54.217 回答
0

为什么不在应用算法之前检查元素的长度。使用len()

for element in filecontent[2]:
   if len(element) == 3:
      name, hours, bonus = element
      ## do other stuff

   else: 
      name, hours = element

编辑 我建议如果你不想要这个解决方案,你可以让文件内容(如果你可以控制它或者你可以改变它)总是返回 3 个元素,如果你没有奖金,0 是默认值。

于 2013-08-07T19:10:10.850 回答