为什么在字典中提取数据时只打印最后一行还需要将“无”替换为0

2024-06-09 09:20:32 发布

您现在位置:Python中文网/ 问答频道 /正文

代码如下

from decimal import Decimal
sample = [
    ("Book", Decimal("10.000"), Decimal("0E-20"), None),
    ("Pen", Decimal("66.66666"), Decimal("0E-20"), None),
    ("Pencil", Decimal("100.0000"), Decimal("0E-20"), 'G'),
]


data = {}
for i in sample:
    
    try:
        data['prod'] = i[0]
        data['test1'] = round(i[1])
        data['test2'] = round(i[2])
        data['test3'] = round(i[3])
      
    except:
        pass

print(data)

我的输出是

{'prod': 'Pencil', 'test1': 100, 'test2': 0}

预计出炉的是全部3本字典

  • 如果None,则在字典中它必须替换为0

     {'prod': 'Book', 'test1': 10.00, 'test2': 0, 'test3':0}
      {'prod': 'Pen', 'test1': 66.66, 'test2': 0, 'test3':0}
      {'prod': 'Pencil', 'test1': 100, 'test2': 0, 'test3':'G'}
    

预料之外

[{'prod': 'Book', 'test1': 10, 'test2': 0, 'test3': 0}, {'prod': 'Pen', 'test1': 67, 'test2': 0, 'test3': 0}, {'prod': 'Pencil', 'test1': 100, 'test2': 0, 'test3': 'G'}]


Tags: sample代码fromnonedata字典proddecimal
3条回答

您希望打印3词典,但data仅包含1个(每个元素的最后一个值都已分配给它)

您可能希望这样做:

from decimal import Decimal
from collections import defaultdict
sample = [
    ("Book", Decimal("10.000"), Decimal("0E-20"), None),
    ("Pen", Decimal("66.66666"), Decimal("0E-20"), None),
    ("Pencil", Decimal("100.0000"), Decimal("0E-20"), 'G'),
]
data = defaultdict(list)
for i in sample:
    try:
        data['prod'].append(i[0])
        data['test1'].append(round(i[1]))
        data['test2'].append(round(i[2]))
        data['test3'].append(round(i[3]))
    except:
        pass

print(dict(data))

将以下行打印到标准输出:

{'prod': ['Book', 'Pen', 'Pencil'], 'test1': [10, 67, 100], 'test2': [0, 0, 0], 'test3': []}

更新: 根据下面的注释,您需要不同的输出,因此我将上面的代码更改如下:

from decimal import Decimal
sample = [
    ("Book", Decimal("10.000"), Decimal("0E-20"), None),
    ("Pen", Decimal("66.66666"), Decimal("0E-20"), None),
    ("Pencil", Decimal("100.0000"), Decimal("0E-20"), 'G'),
]
data = []
for i in sample:
    row = {}
    try:
        row['prod'] = i[0]
        row['test1'] = round(i[1])
        row['test2'] = round(i[2])
        row['test3'] = i[3] or 0
    except:
        pass
    finally:
        data.append(row)

print(data)

产出为:

[{'prod': 'Book', 'test1': 10, 'test2': 0, 'test3': 0}, {'prod': 'Pen', 'test1': 67, 'test2': 0, 'test3': 0}, {'prod': 'Pencil', 'test1': 100, 'test2': 0, 'test3': 'G'}] 

您需要创建字典列表并将每个字典添加到其中:

from decimal import Decimal
sample = [
    ("Book", Decimal("10.000"), Decimal("0E-20"), None),
    ("Pen", Decimal("66.66666"), Decimal("0E-20"), None),
    ("Pencil", Decimal("100.0000"), Decimal("0E-20"), 'G'),
]


datalst=[]    # <  -

for i in sample:
    data = {} # <  -
    data['prod'] = i[0]
    data['test1'] = round(i[1])
    data['test2'] = round(i[2])
    data['test3'] = i[3] if i[3] else 0  # <   if None add 0 else original value
    datalst.append(data)   #  <  -

print(datalst)

相关问题 更多 >