我有一个字典,可能有一些键的长值。我想将此字典转换为字符串并将其发送到服务器。但是当我使用str(dict)函数将其转换为字符串时,具有long值的值后缀为“L”。这是当我将它发送到服务器时它产生问题的值。所以任何人都可以建议我更简单的方法来避免'L'后缀
答案 0 :(得分:3)
我不确定你的用例是什么,但要解决这个问题,很可能是你会建议使用json的下一个问题。
import json
a = {'a': 10, 'b': 1234567812345678L}
print json.dumps(a)
# output:
{"a": 10, "b": 1234567812345678}
答案 1 :(得分:1)
这是因为在dict上调用str
仍会调用repr
来获取其内容的表示。
你应该编写自己的函数来迭代dict
>>> D = {10000000000000000+n:n for n in range(10)}
>>> print D
{10000000000000000L: 0, 10000000000000001L: 1, 10000000000000002L: 2, 10000000000000003L: 3, 10000000000000004L: 4, 10000000000000005L: 5, 10000000000000006L: 6, 10000000000000007L: 7, 10000000000000008L: 8, 10000000000000009L: 9}
>>> print "{{{}}}".format(', '.join("{}: {}".format(*i) for i in D.items()))
{10000000000000000: 0, 10000000000000001: 1, 10000000000000002: 2, 10000000000000003: 3, 10000000000000004: 4, 10000000000000005: 5, 10000000000000006: 6, 10000000000000007: 7, 10000000000000008: 8, 10000000000000009: 9}
答案 2 :(得分:0)
展开gnibbler的代码接近于此:
# put all key-value-pairs into a list, formatted as strings
tmp1 = []
for i in D.items()
tmp2 = "{}: {}".format(*i)
tmp1.append(tmp2)
# create a single string by joining the elements with a comma
tmp3 = ", ".join(tmp1)
# add curly braces
tmp4 = "{{{}}}".format(tmp3)
# output result
print tmp4
他构造的内部部分称为生成器表达式。它们更有效率,因为它们不需要临时列表(或元组)“tmp1”并允许非常简洁的语法。此外,对于不熟悉构造的人来说,他们可以使代码几乎不可读,如果你有这个问题,请尝试从内到外阅读。 ; ^)