我想知道如何在列表和子列表中输出每个索引(和子索引)的名称而不是值。
例如,假设我有一个主列表,其中包含3个其他列表,每个列表包含5个子列表。这是一个澄清的小例子:
List1 = [SubList1, SubList2, SubList3, SubList4, SubList5]
List2 = [Apple, Banana, Orange, Pear, Grape]
List3 = [Red, Yellow, Orange, Green, Purple]
Lists = [List1, List2, List3]
MainList = [Lists]
如何打印' List1'?
当我输入
时MainList[0][0]
输出
[SubList1, SubList2, ..., Sublist5]
我想要索引的实际名称,而不是它的值。
我考虑过使用字典键,但我用于XML转换的报表生成器将所有数据输出到列表中。这是否意味着我别无选择,只能修改我的报告生成器脚本以将数据输出到词典中?
答案 0 :(得分:2)
尝试将dict()
用于此目的:
List1 = ['SubList1', 'SubList2', 'SubList3', 'SubList4', 'SubList5']
List2 = ['Apple', 'Banana', 'Orange', 'Pear', 'Grape']
List3 = ['Red', 'Yellow', 'Orange', 'Green', 'Purple']
xd = {'List1': List1, 'List2': List2, 'List3': List3}
print xd['List1']
for k, v in xd.iteritems():
if v == List1:
print k
>>> ['SubList1', 'SubList2', 'SubList3', 'SubList4', 'SubList5']
>>> List1
答案 1 :(得分:1)
list对象没有name属性,你应该使用pandas.Series如下:
import pandas as pds
List1 = pds.Series([SubList1, SubList2, SubList3, SubList4, SubList5],name='List1')
List2 = pds.Series([Apple, Banana, Orange, Pear, Grape],name='List2')
你找到这样的名字:
print List1.name,List2.name
列表列表成为pandas.DataFrame:
Lists = pds.DataFrame([List1, List2, List3])
要回答您的问题,请按以下步骤操作:
- 每个子列表成为一个系列
Sublist = pds.Series([...],name='Sublist')
- 每个列表成为数据帧:
List = pds.DataFrame([Sublist1,Sublist2,..])
- “the”列表成为一个词典:
Lists = {'List1' : List1,
'List2' : List2,
...
}
- 你得到了名字:
for name_list,list in Lists.items():
name_list,list.columns
答案 2 :(得分:1)
快速解决方案:
class NamedList(list):
__slots__ = ['__name__'] # optimisation, can be ommited
def __init__(self, name, *args):
super().__init__(*args)
self.__name__ = name
def __repr__(self):
return "%s(%r, %s)" % (type(self).__name__, self.__name__, super().__repr__())
test = NamedList('test', [1, 2, 3])
print(test)
print(test.__name__)
输出:
NamedList('test', [1, 2, 3])
test
答案 3 :(得分:1)
如果您的列表始终存储为变量,您可以使用某种标识字典检索其名称(遗憾的是标准库中没有):
names = IdentityWeakKeyDict((obj, name for name, obj in locals().items()))
names
现在应该将对象映射到他们的名字。