按正确的顺序匹配两个字典键值

时间:2019-02-25 22:17:34

标签: python dictionary

我有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())

但是我认为这只会更新值,而不会更新值的顺序。

2 个答案:

答案 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输出时按键的顺序。