【问题标题】:reading an array with multiple items (working on two items not three)读取包含多个项目的数组(处理两个项目而不是三个项目)
【发布时间】:2013-08-09 07:45:58
【问题描述】:

下面的代码从文本文件中读取(包含不同的数组) 并分解成单独的元素。 我可以很好地处理具有两个子项的数组,但不是第三个。

例如 - 这个文件可以正常工作:

('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()))

但我有一个不同的月份,有一个 third 数组元素(一个 bonus 数字),例如:

('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()))

【问题讨论】:

    标签: python arrays python-3.x tuples


    【解决方案1】:

    当你这样做时:

    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 将展开(分解)的元组传递给格式化函数,然后将其映射到第二个和第三个参数。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-25
        • 2019-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-01
        相关资源
        最近更新 更多