我在python中有一个由两个IP索引的二维字典。我想用第一把键对字典进行分组。
例如,之前看起来像这样:
myDict["182.12.17.50"]["175.12.13.14"] = 14
myDict["182.15.12.30"]["175.12.13.15"] = 10
myDict["182.12.17.50"]["185.23.15.69"] = 30
myDict["182.15.12.30"]["145.33.34.56"] = 230
所以
for key1, key2 in myDict:
print key1 +" " +key2 +" " +myDict[key1, key2]
会打印
182.12.17.50 175.12.13.14 14
182.15.12.30 175.12.13.15 10
182.12.17.50 185.23.15.69 30
182.15.12.30 145.33.34.56 230
但我想对它进行排序以便打印
182.12.17.50 175.12.13.14 14
182.12.17.50 185.23.15.69 30
182.15.12.30 175.12.13.15 10
182.15.12.30 145.33.34.56 230
知道如何实现这一目标吗?
答案 0 :(得分:3)
嗯,有各种各样的选择。其中之一就是在打印前对键进行排序,如下所示:
for key1 in sorted(myDict):
for key2 in myDict[key1]:
print key1 +" " +key2 +" " +myDict[key1][key2]
另一种选择是使用sorteddict模块中的blist类(免责声明:我是作者:)),它将始终按排序顺序返回键。
在任何一种情况下,由于密钥是IP地址,您可能希望编写自定义“密钥”函数以传递给sort / sorted / sorteddict,以便它们按数字值排序,而不是按字典顺序排序为字符串。
答案 1 :(得分:1)
Dicts没有订单,但你可以得到的是一个排序的项目列表。
>>> sorted((k, sorted(v.items())) for k,v in myDict.items())
[('182.12.17.50', [('175.12.13.14', 14), ('185.23.15.69', 30)]),
('182.15.12.30', [('145.33.34.56', 230), ('175.12.13.15', 10)])]
答案 2 :(得分:0)
您可以将自定义比较功能传递给Sorted。 http://docs.python.org/library/functions.html#sorted
有了它,您可以指定要比较的键和方式。
答案 3 :(得分:0)
我想,我还没有很好地理解这个问题。
上面字典的输出不会是这样的:
>>> myDict
{'182.12.17.50': {'185.23.15.69': 30, '175.12.13.14': 14}, '182.15.12.30': {'175.12.13.15': 10, '145.33.34.56': 230}}
然后您可以使用OrderedDict创建排序字典。
答案 4 :(得分:0)
字典是一种无序类型,在您的示例中,我没有看到您希望订购该字典的原因。
如果您需要创建字典内容的有序系列,即其项目,您可以通过应用sorted
来实现:
# Returns sorted list of item tuples
sorted(myDict.iteritems())
如果您的Python版本支持它,请查看OrderedDict
,并了解具有排序字典的含义。