【问题标题】:Remove the comma which appears after converting a json array to tuples删除将 json 数组转换为元组后出现的逗号
【发布时间】:2019-12-10 15:56:13
【问题描述】:

我在 json 数组中有一个值数组。我想将这些值转换为我已经做过的元组对,但由于某种原因,每个元组对的末尾都有一个逗号。有人可以指导我如何删除逗号。

JSON:

m=    [
            [
                [
                    -118.221524,
                    34.034603
                ],
                [
                    -118.273798,
                    34.038365
                ]
            ]
        ]

在网上研究了如何应用格式来删除逗号

for i in m:
    for j in i:
        lines=tuple(j)
        a = []
        a.append(lines)
        print(tuple(a))

预期:

((-118.27373, 34.038352))
((-118.273798, 34.038365))

实际:

((-118.27373, 34.038352),)
((-118.273798, 34.038365),)

【问题讨论】:

  • 单元素元组使用逗号将它们与简单的分组括号区分开来。逗号没有任何作用。它在什么背景下很重要?为了演示?
  • 为了在图表上绘制一条线时将它们视为坐标,我在想如果删除逗号会有所不同,但如果这就是元组的区别方式,也许我应该保持原样.你有什么建议?
  • 结尾的逗号没有任何作用。它在打印时就在那里,所以你可以知道它是一个元组。它实际上并不“存在”或影响任何事情。
  • 明白。感谢您的反馈
  • 如果您想摆脱它以进行演示,您可以使用 * 解压缩元组,或者将其转换为列表,或 join 它。

标签: python arrays json


【解决方案1】:

在 Python 中,元组被打印(或多或少定义)为带有尾随逗号(更多关于这个here。你可以看到源here,它实际上写了一个元组对象的repr(假设您正在使用 CPython 解释器)。

不过,如果您愿意放弃使用元组,而是使用列表(看起来您已经在尝试这样做),您可以这样做:

for i in m:
    for j in i:
        lines=tuple(j)
        a = []
        a.append(lines)
        # Notice this prints `a` which is an array and not a tuple
        print(a)

# prints:
# [(-118.27373, 34.038352)]
# [(-118.273798, 34.038365)]

如果你确实想使用一个元组,你最好的办法是对外部元组进行一些手动格式化,如下所示:

for i in m:
    for j in i:
        lines=tuple(j)
        a = []
        a.append(lines)
        # Notice this prints `a` which is an array and not a tuple
        a = tuple(a)
        print("({})".format(a[0]))

# ((-118.221524, 34.034603))
# ((-118.273798, 34.038365))

希望这会有所帮助!

【讨论】:

  • 虽然我不会使用列表来“摆脱”逗号。元组确实有它们的好处。
  • “你正在打印一个元组而不是一个集合的视觉提示”你能详细说明一下吗?集合由大括号区分,所以我不确定元组与它们有什么关系。
  • 对不起,我在想在 python 2 中,集合是用括号打印的(但还有 set 前缀到括号)。我已经更新了答案,提供了一个文档链接,该文档讨论了元组以及为什么它们有尾随逗号。
【解决方案2】:

删除逗号的唯一方法是不打印元组本身(即print(tuple(a))),因为逗号是由 python 实现添加以表示它是一个元组。

相反,您可以创建一个函数来获取一维元组(举一个更简单的示例)并创建一个自定义字符串,然后打印该字符串,例如 la:

def print_tuple(t):
    s = '(('
    for i, val in enumerate(t):
        s += f'{t[i]}'
        if i != len(t) - 1:
            s += ', '
    s += '))'
    print(s)

# test
a = tuple([1,2,3])
print_tuple_1d(a)  # prints: ((1, 2, 3))

【讨论】:

  • 使用元组的str()/repr()应该比手动构造字符串要容易得多。
  • 老实说,使用join:", ".join(tuple(a[0])) 会容易得多,然后根据需要添加一些括号。
  • 当然。但是,它不支持更多定制的格式要求,也不支持多维元组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 2020-11-03
  • 2017-10-30
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
相关资源
最近更新 更多