我正在尝试导出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"]
]]
答案 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)