字典'update'方法
Dictionary 'update' method
我有一个脚本可以构建多个词典并将它们合并为一个词典以 return 到调用实体。要求是将每个字典附加到前一个字典的末尾。当我在我的电脑上构建它时(Windows 10,python 3.x),它运行良好,如下所示。
{
"Array Name": "SU73ARWVSPF01",
"storageSystemId": "22186",
"storageSystemName": "POD5_SU73ARWVSPF01",
"accessible": true,
"model": "VSP G1500",
"svpIpAddress": "10.185.35.37",
"firmwareVersion": "80-06-78-00/00",
"lastRefreshedTime": "2020-12-21 14:45:31",
"Pool List": {
"Pool-1": {
"storagePoolId": 11,
"label": "DATA",
"capacityInBytes": 590323982008320,
"usedCapacityInBytes": 422152148877312,
"availableCapacityInBytes": 168171833131008,
"usedSubscription": 83
},
"Pool-2": {
"storagePoolId": 12,
"label": "LOGS",
"capacityInBytes": 28142827732992,
"usedCapacityInBytes": 21991601995776,
"availableCapacityInBytes": 6151225737216,
"usedSubscription": 78
}
},
"SNMP Manager List": {
"SNMP-1": {
"name": "Test",
"ipAddress": "1.1.1.1"
},
"SNMP-2": {
"name": "Test1",
"ipAddress": "2.2.2.2"
}
},
"Hardware Alert List": {
"diskAlerts": false,
"powerSupplyAlerts": false,
"batteryAlerts": false,
"fanAlerts": false,
"portAlerts": false,
"cacheAlerts": false,
"memoryAlerts": false,
"processorAlerts": false
}
}
但是,将其移动到实际程序所在的服务器后 运行(RHEL 7,python 2.7),字典的顺序变得混乱,如下所示。
{
"accessible": true,
"storageSystemName": "POD5_SU73ARWVSPF01",
"Hardware Alert List": {
"cacheAlerts": false,
"powerSupplyAlerts": false,
"portAlerts": false,
"processorAlerts": false,
"batteryAlerts": false,
"diskAlerts": false,
"fanAlerts": false,
"memoryAlerts": false
},
"SNMP Manager List": {
"SNMP-1": {
"ipAddress": "1.1.1.1",
"name": "Test"
},
"SNMP-2": {
"ipAddress": "2.2.2.2",
"name": "Test1"
}
},
"svpIpAddress": "10.185.35.37",
"storageSystemId": "22186",
"Array Name": "SU73ARWVSPF01",
"lastRefreshedTime": "2020-12-21 21:45:31",
"model": "VSP G1500",
"Pool List": {
"Pool-2": {
"usedSubscription": 78,
"label": "LOGS",
"usedCapacityInBytes": 21991601995776,
"storagePoolId": 12,
"availableCapacityInBytes": 6151225737216,
"capacityInBytes": 28142827732992
},
"Pool-1": {
"usedSubscription": 83,
"label": "DATA",
"usedCapacityInBytes": 422152148877312,
"storagePoolId": 11,
"availableCapacityInBytes": 168171833131008,
"capacityInBytes": 590323982008320
}
},
"firmwareVersion": "80-06-78-00/00"
}
第一个的输出是我想要的和编程的方式,使用
OUTPUT={}
OUTPUT.update(new Dict1), OUTPUT.update(new Dict2).... etc
有没有办法避免字典插入到另一个字典的中间而不是最后
Python 保持插入顺序的字典只是一个特性since Python 3.6 (although they were only an implementation detail back then; alternative Python implementations didn't have to adhere to this). Starting from Python 3.7,这已成为一种语言规范。
因为您在服务器上使用 Python 2.7,所以使用默认 dict
class 不能保证字典顺序。您可以使用 collections.OrderedDict
class 来确保记住插入顺序。
我有一个脚本可以构建多个词典并将它们合并为一个词典以 return 到调用实体。要求是将每个字典附加到前一个字典的末尾。当我在我的电脑上构建它时(Windows 10,python 3.x),它运行良好,如下所示。
{
"Array Name": "SU73ARWVSPF01",
"storageSystemId": "22186",
"storageSystemName": "POD5_SU73ARWVSPF01",
"accessible": true,
"model": "VSP G1500",
"svpIpAddress": "10.185.35.37",
"firmwareVersion": "80-06-78-00/00",
"lastRefreshedTime": "2020-12-21 14:45:31",
"Pool List": {
"Pool-1": {
"storagePoolId": 11,
"label": "DATA",
"capacityInBytes": 590323982008320,
"usedCapacityInBytes": 422152148877312,
"availableCapacityInBytes": 168171833131008,
"usedSubscription": 83
},
"Pool-2": {
"storagePoolId": 12,
"label": "LOGS",
"capacityInBytes": 28142827732992,
"usedCapacityInBytes": 21991601995776,
"availableCapacityInBytes": 6151225737216,
"usedSubscription": 78
}
},
"SNMP Manager List": {
"SNMP-1": {
"name": "Test",
"ipAddress": "1.1.1.1"
},
"SNMP-2": {
"name": "Test1",
"ipAddress": "2.2.2.2"
}
},
"Hardware Alert List": {
"diskAlerts": false,
"powerSupplyAlerts": false,
"batteryAlerts": false,
"fanAlerts": false,
"portAlerts": false,
"cacheAlerts": false,
"memoryAlerts": false,
"processorAlerts": false
}
}
但是,将其移动到实际程序所在的服务器后 运行(RHEL 7,python 2.7),字典的顺序变得混乱,如下所示。
{
"accessible": true,
"storageSystemName": "POD5_SU73ARWVSPF01",
"Hardware Alert List": {
"cacheAlerts": false,
"powerSupplyAlerts": false,
"portAlerts": false,
"processorAlerts": false,
"batteryAlerts": false,
"diskAlerts": false,
"fanAlerts": false,
"memoryAlerts": false
},
"SNMP Manager List": {
"SNMP-1": {
"ipAddress": "1.1.1.1",
"name": "Test"
},
"SNMP-2": {
"ipAddress": "2.2.2.2",
"name": "Test1"
}
},
"svpIpAddress": "10.185.35.37",
"storageSystemId": "22186",
"Array Name": "SU73ARWVSPF01",
"lastRefreshedTime": "2020-12-21 21:45:31",
"model": "VSP G1500",
"Pool List": {
"Pool-2": {
"usedSubscription": 78,
"label": "LOGS",
"usedCapacityInBytes": 21991601995776,
"storagePoolId": 12,
"availableCapacityInBytes": 6151225737216,
"capacityInBytes": 28142827732992
},
"Pool-1": {
"usedSubscription": 83,
"label": "DATA",
"usedCapacityInBytes": 422152148877312,
"storagePoolId": 11,
"availableCapacityInBytes": 168171833131008,
"capacityInBytes": 590323982008320
}
},
"firmwareVersion": "80-06-78-00/00"
}
第一个的输出是我想要的和编程的方式,使用
OUTPUT={}
OUTPUT.update(new Dict1), OUTPUT.update(new Dict2).... etc
有没有办法避免字典插入到另一个字典的中间而不是最后
Python 保持插入顺序的字典只是一个特性since Python 3.6 (although they were only an implementation detail back then; alternative Python implementations didn't have to adhere to this). Starting from Python 3.7,这已成为一种语言规范。
因为您在服务器上使用 Python 2.7,所以使用默认 dict
class 不能保证字典顺序。您可以使用 collections.OrderedDict
class 来确保记住插入顺序。