如何在Python字典中访问列表内的元素?

4
我有一个函数返回一个JSON格式的数据集。以下是一个示例:
[{u'category': [u'Transfer', u'Withdrawal', u'ATM'], u'category_id': u'21012002', u'_account': u'XARE85EJqKsjxLp6XR8ocg8VakrkXpTXmRdOo', u'name': u'ATM Withdrawal', u'amount': 200, u'meta': {u'location': {u'city': u'San Francisco', u'state': u'CA'}}, u'date': u'2014-07-21', u'score': {u'location': {u'city': 1, u'state': 1}, u'name': 1}, u'_id': u'0AZ0De04KqsreDgVwM1RSRYjyd8yXxSDQ8Zxn', u'type': {u'primary': u'special'}, u'pending': False}] 

for trans in foodie_data:
            print 'Name={},Amount={},Date={}, Categories ={}\n'.format(trans['name'],trans['amount'],trans['date'],trans['category'])

这段脚本会输出:
Name=ATM Withdrawal,Amount=200,Date=2014-07-21,Categories=[u'Transfer', u'Withdrawal', u'ATM']

我希望它返回一个字符串而不是列表的类别:
Name=ATM Withdrawal,Amount=200,Date=2014-07-21,Categories='Transfer, Withdrawal,ATM']

什么是最有效的方法?

1
', '.join(trans['category']) 的意思是什么? - Shashank
3个回答

2
您可以将类别元素组合起来:
>>> categories = [u'Transfer', u'Withdrawal', u'ATM']
>>> ",".join(categories)
u'Transfer,Withdrawal,ATM'

在打印输出时,使用它来代替:

",".join(trans['category'])

2

您的代码中应该只需要两个快速修复即可解决问题

  1. Join the list returned by trans['category'] separated by comma such that it is a string rather than a string representation of list.
  2. Quote the format specifier for category i.e. Categories =\'{}\'

    for trans in foodie_data:
        print 'Name={},Amount={},Date={}, Categories =\'{}\'\n'.format(
        trans['name'],
        trans['amount'],
        trans['date'],
        ', '.join(trans['category']))
    

0

你也可以直接使用字典和 str.format 来访问其余的值:

for trans in foodie_data:
    print "Name={name},Amount={amount},Date={date}," \
       "Categories='{}'\n".format(",".join(trans["category"]),**trans)


 Name=ATM Withdrawal,Amount=200,Date=2014-07-21,Categories='Transfer,Withdrawal,ATM'

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