python - 如何使用包含字符串的字典键以及包含列表的字典键创建 csv 文件?
问题描述
name = {}
name["one"] = "onestring"
name["two"] = "twostring"
name["three"] = [1, 2, 3, 4]
name["four"] = ["string", "hello"]
Expected output should be like
one two three four
onestring twostring 1 string
2 hello
3
4
如何创建具有上述格式的 csv 文件?字典值有一些普通的字符串值,一些有列表值。如何创建具有上述格式的csv?
解决方案
你可以这样做 :
import csv
name = {'one': 'onestring', 'two': 'twostring', 'three': [1, 2, 3, 4], 'four': ['string', 'hello']}
# Be sure types are str or list only
assert(all(type(x) in (str, list) for x in name.values()))
csv_filename = "names.csv"
# Get length of the biggest list
max_length = 0
for key in name:
value = name[key]
if type(value) is list:
list_length = len(value)
if list_length > max_length:
max_length = list_length
# Replace strings and lists by only lists, of equal length
equal_lengths_dict = dict()
for key in name:
value = name[key]
if type(value) is str:
replacement_list = [""] * max_length
replacement_list[0] = value
equal_lengths_dict[key] = replacement_list
elif type(value) is list:
value_length = len(value)
if value_length < max_length:
number_empty_strings_to_add = max_length - value_length
empty_strings_to_add = [""] * number_empty_strings_to_add
replacement_list = value + empty_strings_to_add
equal_lengths_dict[key] = replacement_list
elif value_length == max_length:
equal_lengths_dict[key] = value
else:
print("error")
else:
print("error")
# Get field names (header row of csv)
fieldnames = list(name.keys())
# Get values that will be on the same rows
csv_rows = list()
# Csv header
csv_rows.append(fieldnames)
# Other rows
list_of_values = equal_lengths_dict.values()
for index in range(max_length):
one_row = list()
for value in list_of_values:
one_row.append(value[index])
csv_rows.append(one_row)
with open(csv_filename, "w", newline="") as f:
writer = csv.writer(f, delimiter="\t")
writer.writerows(csv_rows)
您将不得不添加一些检查和测试。
也许你可以用这样的东西重命名你的问题的标题:“将字典写入 csv 文件,其中键/值对代表列并且具有不等长度的值(字符串和可变长度列表)”。
推荐阅读
- html - 如何设置全屏背景图片?
- python - 如何在特定应用程序上模拟按键
- java - 如何检查是否实现了 java 本机方法?
- r - ggplot2 boxplots - 如何在 x 轴上对因子水平进行分组(并为每个组均值添加参考线)
- python - python中的日期时间错误有什么解决方案吗?
- excel - 为什么 Microsoft Excel 中的 POISSON 函数不一致?
- excel - 函数 SumIf 需要帮助
- javascript - 如何将 PHP 测验脚本连接到 html5 游戏(facebook 即时游戏)
- regex - 如何映射多行(每行使用 perl 具有相同的格式
- node.js - Gitlab-ci 没有使用我指定的节点版本