我有一个非常大的嵌套列表,如下所示:
a_lis = [[{'A': 'the', 'B': 'US3---'}, {'A': 'the', 'B': 'PS3N'}, {'A': 'the', 'B': 'P3N'}, {'A': 'quick', 'B': 'GS'}, {'A': 'quick', 'B': 'NCMSN-'}, {'A': 'fox', 'B': 'YN-'}, {'A': 'it', 'B': 'VI--2PSA--N-'}, {'A': 'jumping', 'B': 'GNM-'}]]
如何将其转换为?:
[('the', 'US3---'), ('the', 'PS3N'), ('the', 'P3N'), ('quick', 'GS'), ('quick', 'NCMSN-'), ('fox', 'YN-'), ('it's, 'VI--2PSA--N-'), ('jumping', 'GNM-')]
我试图:
tuples = ['{}'.join(x) for x in a_list[0]]
和
values = [','.join(str(v) for v in a_list)]
主要问题是我不知道如何管理}{
字符。有人可以用理解列表解释哪种方法可以管理它们吗?
答案 0 :(得分:4)
使用输入行中的字符串修复语法错误,您可以使用类似
的正确确保顺序>>> list(map(lambda d: (d['A'], d['B']), a_lis[0]))
[('the', 'US3---'),
('the', 'PS3N'),
('the', 'P3N'),
('quick', 'GS'),
('quick', 'NCMSN-'),
('fox', 'YN-'),
("it's", 'VI--2PSA--N-'),
('jumping', 'GNM-')]
或等同于列表理解
>>> [(d['A'], d['B']) for d in a_lis[0]]
[('the', 'US3---'),
('the', 'PS3N'),
('the', 'P3N'),
('quick', 'GS'),
('quick', 'NCMSN-'),
('fox', 'YN-'),
("it's", 'VI--2PSA--N-'),
('jumping', 'GNM-')]
如果a_lis
的项目超出了您希望在元组列表中的第一个索引之外的其他列表,则可以解压缩。
list(map(lambda d: (d['A'], d['B']), *a_lis))
答案 1 :(得分:2)
[tuple(j.values()) for i in a_lis for j in i]
答案 2 :(得分:1)
你的嵌套列表有一个"引用"问题在哪里。修复后,您可以使用列表解析从字典值重新创建元组:
a_lis = [[{'A': 'the', 'B': 'US3---'}, {'A': 'the', 'B': 'PS3N'}, {'A': 'the', 'B': 'P3N'}, {'A': 'quick', 'B': 'GS'}, {'A': 'quick', 'B': 'NCMSN-'}, {'A': 'fox', 'B': 'YN-'}, {'A': "it's", 'B': 'VI--2PSA--N-'}, {'A': 'jumping', 'B': 'GNM-'}]]
n = [tuple(a.values()) for a in a_lis[0]]
print(n)
你得到:
[('US3---', 'the'), ('PS3N', 'the'), ('P3N', 'the'), ('GS', 'quick'), ('NCMSN-', 'quick'), ('YN-', 'fox'), ('VI--2PSA--N-', "it's"), ('GNM-', 'jumping')]
正如有人指出的那样,除非您使用Python 3.6,否则您可以通过这样做(不一定是输入顺序)获得字典的自然内部顺序,这可能不是您想要的。
答案 3 :(得分:1)
将列表链接起来并提供给tuple
:
from itertools import chain
tps = [tuple(i.values()) for i in chain.from_iterable(a_lis)]
变量tps
现在(随机)成立:
[('the', 'US3---'),
('the', 'PS3N'),
('the', 'P3N'),
('quick', 'GS'),
('quick', 'NCMSN-'),
('fox', 'YN-'),
('its', 'VI--2PSA--N-'),
('jumping', 'GNM-')]
如果需要确定性地处理元组的创建,首先应将所有嵌套字典转换为有序字典:
from collections import OrderedDict
a_lis = [OrderedDict(d) for d in a_lis[0]]
然后像以前一样执行字典转换。
答案 4 :(得分:1)
您可以通过在每个字典中的值上调用tuple来获得所需内容:
@Html.TextBoxFor(model => model.DateOfDelivery, "{0:dd.MM.yyyy}")
如果您需要在密钥上对元组进行排序:
nested = a_lis[0]
value_tuples = [tuple(dictionary.values()) for dictionary in nested]