导出文件时,打印键的次数与其值一样多

时间:2018-03-18 11:25:31

标签: python function export

我正在尝试导出CSV文件,字典中的键,我希望每个键的写入次数与其值相同。我希望我的输出是

['battleaxe', 'daggerdaggerdagger', 'gold coin']

但我得到了

def export_inventory(inventory, filename="export_inventory.csv"): with open(filename, "w") as csvfile: new = csv.writer(csvfile, quoting=csv.QUOTE_MINIMAL) new.writerow((k*v for (k,v) in inventory.items()))

我的代码:

def test_export_inventory(self):
    export_inventory({'dagger': 3, 'gold coin': 1, "battleaxe": 1},
                     "test_inventory_export.csv")

    with open("test_inventory_export.csv", newline='') as csvfile:
        expected = ["dagger", "gold coin", "battleaxe", "dagger", "dagger"]
        expected.sort()
        reader = csv.reader(csvfile, delimiter=',', quotechar='|')
        for row in reader:
            row.sort()
            self.assertListEqual(expected, row)

测试功能:

let postObject: [[String: Any]] = [[
    "From": [
        "uid" : User.uid,
        "username" : User.username,
        "photoURL" : User.photoURL.absoluteString
    ],
    "Message" : textView.text,
    "timestamp" : [".sv" : "timestamp"]
    ]]

3 个答案:

答案 0 :(得分:0)

这可能会有所帮助。

由于我们不知道CSV的内容,因此根据您所需的输出,我假设一个类似于下面的字典的结构。

weapons = {'battleaxe': 1, 'dagger': 3, 'gold coin': 1}

result = []

for item, times in weapons.items():
  for t in range(times):
    result.append(item)
print (result)

# ['battleaxe', 'dagger', 'dagger', 'dagger', 'gold coin']

请注意,在您的代码中,您正在执行k * v,有效地将项字符串乘以项目存在的次数。在我建议的代码中,我们将其添加到列表中。

答案 1 :(得分:0)

new.writerow((k for k,v in inventory.items() for _ in range(v)))

k * v只是字符串乘法; 'a'* 3#aaaa

答案 2 :(得分:0)

你的代码不起作用的原因是因为k * v将复制字符串v次,例如:o * 3使用ooo。

def export_inventory(inventory, filename="export_inventory.csv"):
        l = []
        with open(filename, "w") as csvfile:
            new = csv.writer(csvfile, quoting=csv.QUOTE_MINIMAL)
            for key,value in inventory.items():
                l+=[key for _ in range(value)]
            new.writerow(l)