【发布时间】:2014-01-30 01:21:22
【问题描述】:
我有一个 Python 字典列表。此列表在 Web 服务之间作为 json 传递。这些 Web 服务基于传递的 json 创建独特的签名。创建签名的一部分是规范化数据负载并确保一切都按正确的顺序进行,所以我正在这样做(在 Python 中)——效果很好。
data = [{'a': '1', 'b': '2', 'c': 3}, {'d': 3}, {3: 1}, {'100': '200'}]
sorted(data)
> [{3: 1}, {'100': '200'}, {'d': 3}, {'a': '1', 'c': 3, 'b': '2'}]
现在,我需要添加一个 C# 应用程序,它需要能够创建与 Python 代码完全相同的签名。我还没有发现像 Python 的 sorted 内置函数一样对上述数据结构进行排序的秘诀。
我正在使用ServiceStack 来解析 json 数据。
我希望它会像做这样的事情一样简单(在 C# 中):
var jsonPayload = "[{\"a\": \"1\", \"b\": \"2\", \"c\": 3}, {\"d\": 3}, {3: 1}, {\"100\": \"200\"}]";
var parsedJson = JsonArrayObjects.Parse(jsonPayload);
parsedJson.Sort();
但是,我从上面的 C# 代码中得到了这个异常:
`At least one object just implement IComparable`
我明白为什么会收到此错误,但我不确定我应该怎么做。我真的希望我不必推出自己的排序逻辑。我正在处理的实际数据是非常动态的。这只是阻碍我前进的一个例子。
是否有人对我如何在 C# 中进行排序以像 sorted python 函数一样为这种类型的嵌套数据结构提供任何建议或建议?
谢谢!
【问题讨论】:
-
也许您可以使用基于内容的签名而不是 JSON 字符串?此外,当我尝试在 Python 3.2.1 中运行
sorted命令时(没有用于排序的特定库),它显示TypeError: unorderable types: dict() < dict()。这种比较是如何发生的? -
对不起,我应该说我使用的是 Python 2.7.5。
-
这个现有问题可能对您有所帮助:stackoverflow.com/questions/736443/…
-
你需要
parsedJson.OrderBy(x => x, someComparator),其中someComparator实现了与Python 2.7 的dict 的__cmp__相同的功能。我还不确定它是如何工作的,如果可以的话,我会研究它...... -
stackoverflow.com/questions/3484293/… 但是,该行为是未指定的,因此它可以并且可能会在实现之间非常频繁,因此我强烈建议不要将其用作您的规范化例程。我会做
sorted(data.items()),因为它很明显并且记录了它的作用
标签: c# python sorting servicestack