2016-10-18 55 views
3

我希望从当前输出中删除所有大括号。我的电流输出,如下图所示:如何删除字典词典中的所有大括号

{'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 

正如我还是新的蟒蛇,我可能会问如果我想删除字典字典中的所有大括号。我的理想输出是否可以实现?如果是这样,我该怎么做呢?任何建议/想法,将不胜感激。谢谢。

+0

第一O项f你为什么要这么做..而你想要的输出是字符串还是你期望的数据结构。 –

+0

@AjayPal我想删除大括号,因为如果演示的目的。为了澄清,我期望的输出是字符串格式。谢谢。 – user3271404

回答

1

可以通过先转换字典中的字符串,然后用空字符串替换所有的括号内做到这一点:

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 
+0

伟大的解决方案。谢谢。 =) – user3271404

+0

@ 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函数进行转换。这为字符串提供了引号,而无需手动添加它们。

虽然您不能指望被修正的订单。所以对于不同的运行你会得到稍微不同的订单。

输出看起来像

'展PTE LTD': '胡萝卜蛋糕':22, '巧克力蛋糕':12, '啤酒':89, 'COQ海鲜': '烤澳大利亚ANGU': 1, '香酥鸡翅膀':1

+0

我不明白你的代码是如何工作的?你解释你的代码背后的逻辑吗?谢谢。 – user3271404

+0

如果还有更多级别的嵌套字典,这将失败。 – enderland

+0

@enterland是否会有更多级别的嵌套字典?这个问题和示例数据都提到了这一点。事实上,OP代码显示了字典是如何构建的,以及它的深度。 –

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,更换iteritems

+0

您的解决方案也很酷。请问有什么区别iteritems和物品?谢谢。 – user3271404

+0

@ user3271404 python2中的项目一次构建完整列表,但iteritems为您提供了一个迭代器。 在python3中,items是[itemview](https://docs.python.org/3.3/library/stdtypes.html#dict-views) –

+0

明白了。感谢您的解释。 =) – 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)) 
+0

python 2.x ...... – repzero