将包含列表的元组列表转换为一个json数组

时间:2018-01-05 16:01:11

标签: python arrays json list tuples

我有元组列表,其中一些元组包含列表作为第一个元素。我需要将此列表转换为json数组。

我还在StackOverflow上阅读了这个问题,例如hereherehere以及其他许多问题,但是没有一个直接解决这个问题。

我尝试了以下方法,如找到here 在这种方法中,我遍历每个列表是在迭代txt文件的每一行并在每一行上执行操作之后生成的。

示例代码:

infile中

Dalmations are white and yes they are pets who live at home.
Huskies tend to be grey and can be pets who also live at home.
Pitbulls usually are beige and can be pets who sometimes live at home.

示例代码

inFile = '/data/sample.txt'
f = open(inFile, 'r').readlines()

def Convert(tup, di):
    for a, b in tup:
        di.setdefault(a[0]).append(b)
    return di


dictionary = {}

for line in f:
    keyTerms = extractTerms(line)
    print keyTerms

extractTerms的结果

[(u'dalmations', u'dog'), (u'white', u'color'), (u'yes', u'pet'), (u'house', u'location')]
[(u'huskies', u'dog'), (u'grey', u'color'), (u'yes', u'pet'),(u'house',u'location')]
[(u'pitbulls', u'dog'), (u'beige', u'color'), (u'yes', u'pet'),(u'house',u'location')]
    allTerms = [(expandAllKeyTerms(a), b) for (a,b) in keyTerms]

    print allTerms

[([u'dalmations', u'dalmation', u'dalmashun', u'dalmationz'], u'dog'), ([u'white'], u'color'), ([u'yes'], u'pet'), ([u'home'], u'location')]
    [([u'huskies', u'husky', u'huskies'], u'dog'), ([u'grey'], u'color'), ([u'yes'], u'pet'), ([u'home'], u'location')]
    [([u'pitbulls'], u'dog'), ([u'beige'], u'color'), ([u'yes'], u'pet'), ([u'home'], u'location')]

new = (Convert(allTerms, dictionary))
print new

样本(错误)最终输出:

{u'dog': [u'dalmations', u'huskies', u'pitbulls'], u'color': [u'white', u'grey', u'beige'], u'pet': [u'yes', u'yes', u'yes'], u'location': [u'home', u'home', u'home']}

我也尝试使用import json // json.dumps(dictionary),但是,它还将所有值与一个相应的键相关联,而不是将每个单独的行维护为自己的条目。

我的目标是达到以下格式

[{u'dog': [u'dalmations'], u'color': [u'white'], u'pet': [u'yes'], u'location': [u'home']};
{u'dog': [u'huskies'], u'color': [u'grey'], u'pet': [u'yes'], u'location': [u'home']};
{u'dog': [ u'pitbulls'], u'color': [u'beige'], u'pet': [u'yes'], u'location': [u'home']}]

有没有办法使用json库或其他列表理解来达到我的欲望输出?

1 个答案:

答案 0 :(得分:0)

以下代码似乎有效。根据您的目标,您可能需要为整个数据集工作(您需要多大的灵活性)。

#!/usr/env python3

import json


a = [
    [
        ('dalmations', 'dog'),
        ('white', 'color'),
        ('yes', 'pet'),
        ('house', 'location'),
    ],
    [
        ('huskies', 'dog'),
        ('grey', 'color'),
        ('yes', 'pet'),
        ('house','location')
    ],
    [
        ('pitbulls', 'dog'),
        ('beige', 'color'),
        ('yes', 'pet'),
        ('house','location')
    ]
]

b = []
for row in a:
    data = {}
    for word in row:
        data[word[1]] = [word[0],]
    b.append(data)

print(json.dumps(b))

这给出了:

[
  {
    "color": ["white"],
    "pet": ["yes"],
    "dog": ["dalmations"],
    "location": ["house"]
  },
  {
    "color": ["grey"],
    "pet": ["yes"],
    "dog": ["huskies"],
    "location": ["house"]
  },
  {
    "color": ["beige"], 
    "pet": ["yes"], 
    "dog": ["pitbulls"], 
    "location": ["house"]
  }
]