如何在字典中移除所有嵌套字典中的花括号

4
我希望能够删除当前输出中的所有花括号。我当前的输出如下所示:
 {'Chin PTE LTD': {'Carrot Cake': 22, 'Chocolate Cake': 12, 'Beer': 89}, 'COQ 
SEAFOOD': {'GRILLED AUSTRALIA ANGU': 1, 'CRISPY CHICKEN WINGS': 1
}}

我目前的代码如下所示:

for merchant, product, quantity in big_list:
    d[merchant][product] += quantity

print ({ k:dict(v) for k,v in d.items() })

我的期望输出:

'Chin PTE LTD': 'Carrot Cake': 22, 'Chocolate Cake': 12, 'Beer': 89, 'COQ 
    SEAFOOD': 'GRILLED AUSTRALIA ANGU': 1, 'CRISPY CHICKEN WINGS': 1

由于我对Python还不是很熟悉,所以想问一下,如果我想要删除字典中所有的花括号,是否可以实现呢?如果可以,应该如何操作呢?非常感谢任何建议和想法。


首先,你为什么想要这样做?你期望的输出是一个字符串还是其他数据结构? - Ajay Pal
@AjayPal 我想要移除花括号,因为这是为了呈现目的。为了澄清,我的期望输出是字符串格式。谢谢。 - user3271404
4个回答

3
您可以先将字典转换为字符串,然后将所有括号替换为空字符串来实现这一点:
d = {'Chin PTE LTD': {'Carrot Cake': 22, 'Chocolate Cake': 12, 'Beer': 89}, 'COQSEAFOOD': {'GRILLED AUSTRALIA ANGU': 1, 'CRISPY CHICKEN WINGS': 1}}

print(str(d).replace("{","").replace("}", ""))

这将会打印出您想要的内容:

'Chin PTE LTD': 'Carrot Cake': 22, 'Chocolate Cake': 12, 'Beer': 89, 'COQSEAFOOD': 'GRILLED AUSTRALIA ANGU': 1, 'CRISPY CHICKEN WINGS': 1

非常好的解决方案。谢谢。=) - user3271404
@user3271404 很高兴能帮忙!请记住,字典是无序的,所以如果您想让列表始终保持相同的顺序,您需要使用不同的对象。 - enderland

0

按照以下方式构建字符串

d = {'Chin PTE LTD': {'Carrot Cake': 22, 'Chocolate Cake': 12, 'Beer': 89}, 'COQ SEAFOOD': {'GRILLED AUSTRALIA ANGU': 1, 'CRISPY CHICKEN WINGS': 1}}

st = ', '.join('%r: %s' % (k, ', '.join('%r: %r' % (sk, sv) for sk, sv in v.items())) for k, v in d.items())
print(st)

这段代码首先通过迭代外部字典来构建字符串。它将键附加到字符串中(加上一个“:”,以符合您的格式要求)。然后它迭代内部字典,并以相同的方式附加键和值。它使用%r格式说明符,这意味着正在打印的元素是使用它们的repr函数转换的。这为字符串添加了引号,而无需手动添加。

但是,您不能保证顺序固定不变。因此,对于不同的运行,您将获得略有不同的顺序。

输出如下:

'Chin PTE LTD': 'Carrot Cake': 22, 'Chocolate Cake': 12, 'Beer': 89, 'COQ SEAFOOD': 'GRILLED AUSTRALIA ANGU': 1, 'CRISPY CHICKEN WINGS': 1


我不明白你的代码是如何工作的?你能解释一下代码背后的逻辑吗?谢谢。 - user3271404
如果有更多层嵌套的字典,这也会失败。 - enderland
@enterland 会有更多层嵌套的字典吗?问题和示例数据都没有提到这一点。事实上,OP的代码展示了字典是如何构建的,它只有两层深度。 - Paul Rooney
@PaulRooney,感谢您友善的解释。现在我有了更清晰的认识,非常感谢! - user3271404

0
d = {'Chin PTE LTD': {'Carrot Cake': 22, 'Chocolate Cake': 12, 'Beer': 89}, 'COQ SEAFOOD': {'GRILLED AUSTRALIA ANGU': 1, 'CRISPY CHICKEN WINGS': 1}}

', '.join(['{}: {}'.format(merchant, ', '.join(['{}: {}'.format(product, quantity) for product, quantity in products.items()])) for merchant, products in d.items()])

如果你使用的是Python2而不是Python3,请将items替换为iteritems


你的解决方案也很棒。我可以问一下iteritems和items有什么区别吗?谢谢。 - user3271404
@user3271404 在 Python2 中,items 一次性构建完整的列表,但 iteritems 给你一个迭代器。 在 Python3 中,items 是一个 itemview。 (https://docs.python.org/3.3/library/stdtypes.html#dict-views) - Francois Mockers
明白了。谢谢你的解释。=) - user3271404

0
import re
result={'Chin PTE LTD': {'Carrot Cake': 22, 'Chocolate Cake': 12, 'Beer': 89}, 'COQ SEAFOOD': {'GRILLED AUSTRALIA ANGU': 1, 'CRISPY CHICKEN WINGS': 1}}

expected_output=re.sub("}|{","",str(result))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接