我有2个字典:
dict1 = {a:1, b:2, c:3}
dict2 = {a:1, b:2, c:3}
我的目标是将dict1的键写为CSV的标头,并将dict2的值和任何其他字典的值写为与每个标头相对应的值。
我希望csv的第一列为“ b”,因此我创建了一个新的字典,并添加了“ b”以保留顺序,然后使用dict1的其余部分对其进行更新:
new_dict = {}
new_dict["b"] = fields["b"]
new_dict.update(fields)
所以现在,我关心的两个命令是:
new_dict = {b:2, a:1, c:3}
dict2 = {a:1, b:1, c:3}
由于我将new_dict的键写为CSV的标头,因此CSV的顺序如下:b,a,c。如何编写/更改dict2,以使值的顺序与相应的标头相对应?
我尝试过:
for new_dict_key in new_dict.keys():
row[new_dict_key] = new_dict[new_dict_key]
writer.writerow(row.values())
但是我认为这只会更新值,而不会更新值的顺序。
答案 0 :(得分:1)
python中的字典未排序。这意味着您输入键值的顺序可能与打印或评估的顺序不符。
要保持顺序,请使用OrderedDict而不是内置字典!
OrderedDict:记住添加了订单条目的dict子类
因此,只需使用new_dict = collections.OrderedDict()
而不是仅{}
初始化csv
。此外,CSV
模块还提供了DictWriter,它的功能几乎相同,但专门为写入<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.image.Image?>
<GridPane fx:controller="sample.Controller"
xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
<ImageView fitWidth="50" fitHeight="50">
<Image url="https://s.ankama.com/www/static.ankama.com/wakfu/portal/game/item/115/13620723.png"/>
</ImageView>
</GridPane>
文件而设计。因此,这可能对您的情况很有趣!以防万一!
答案 1 :(得分:0)
Python中的词典不保留键的任何顺序。我建议您使用Ptyhon的csv
模块中的DictWriter
。它带有一个fieldnames
参数,该参数指定将列写入CSV输出时按键的顺序。