在Python中打印列表内的字典值

-3 投票
4 回答
6913 浏览
提问于 2025-04-17 17:35

我想在Python中只打印出列表里的字典值。

car_object = {}
    cursor = self._db.execute('SELECT IDENT, MAKE, MODEL, DISPLACEMENT, POWER, LUXURY FROM CARS')
    for row in cursor:
       objectname = 'Car_Object_'+str(row['IDENT'])
       # print (objectname)
       car_object[objectname] = Cars(ident = row['IDENT'], make = row['MAKE'], model = row['MODEL'], disp = row['DISPLACEMENT'], power = row['POWER'], luxury = row['LUXURY'])
       print(objectname, car_object[objectname])
        #print(row['IDENT'], row['MAKE'], row['MODEL'], row['DISPLACEMENT'], row['POWER'], row['LUXURY'])

       yield dict(row)

所以现在打印出来的是:

Car_Object_meA160 {'power': 55, 'ident': 'meA160', 'model': 'A160 CDI', 'disp': 1.7, 'make': 'mercedes', 'luxury': 'N'}
Car_Object_meA190 {'power': 92, 'ident': 'meA190', 'model': 'A190', 'disp': 1.7, 'make': 'mercedes', 'luxury': 'Y'}
Car_Object_meA210 {'power': 103, 'ident': 'meA210', 'model': 'A210 EVO', 'disp': 1.7, 'make': 'mercedes', 'luxury': 'Y'}

...等等。我想要的打印方式是这样的:

                      IDENT         MAKE         MODEL        DISP       POWER     LUX
Car_Object_meA160     meA160       mercedes      A160 CDI     1.7          55      N
Car_Object_meA190     meA190       mercedes      A190         1.7          92      Y
Car_Object_meA210     meA210       mercedes      A210 EVO     1.7          103     Y

所以我想只打印出值,并且希望这些值的顺序按照特定的方式排列。这样做可以吗?谢谢。

4 个回答

0

试试下面的方法……我用字典测试过,所以我访问你所拥有的属性时是用 car_object[obj][key.lower()]。我不能在没看到你的 Cars 类的情况下确定,但你可能应该把它换成类似 car_obj[obj].__getattribute__(key.lower()) 的东西。

car_object = {}
car_object['Car_Object_meA160'] = {'power': 55, 'ident': 'meA160', 'model': 'A160 CDI', 'disp': 1.7, 'make': 'mercedes', 'luxury': 'N'}
car_object['Car_Object_meA190'] = {'power': 92, 'ident': 'meA190', 'model': 'A190', 'disp': 1.7, 'make': 'mercedes', 'luxury': 'Y'}
car_object['Car_Object_meA210'] = {'power': 103, 'ident': 'meA210', 'model': 'A210 EVO', 'disp': 1.7, 'make': 'mercedes', 'luxury': 'Y'}

keys = ['IDENT', 'MAKE', 'MODEL', 'DISP', 'POWER', 'LUXURY']
fmt ='{:>10}' * (len(keys) + 1)
print ' '*len('Car_Object_meA160'), fmt.format('', *keys)

for obj in car_object:
    print obj, fmt.format('', *([car_object[obj][key.lower()] for key in keys]))
0

试试这个:

#print your header labels first                                                                                                                       
d = {'power': 55, 'ident': 'meA160', 'model': 'A160 CDI', 'disp': 1.7, 'make': 'mercedes', 'luxury': 'N'}
# this is for each car                                                                                                                                
headers = ['ident', 'make', 'model', 'disp', 'power', 'luxury'] # change this order if you   want different order                                       
values = [d[h] for h in headers]
print("{0:12}{1:12}{2:12}{3:12}{4:12}{5:12}".format(values[0], values[1], values[2], values[3], values[4], values[5]))
1

这里有个难点,就是要把表格中的多个条目和表头对齐。为此,我们首先需要找出每一列中最长的条目有多长。接着,可以用 pad 函数给指定的字符串添加一些空格。

fields = ["ident", "make", "model", "disp", "power", "luxury"]
max_len = {"name": max(map(len, car_objects)) + 1}
for f in fields:
    max_len[f] = max(map(len, [f] + [str(car[f]) for car in car_objects.values()]))
pad = lambda s, f: str(s).ljust(max_len[f])

现在,我们可以使用上面定义的 pad 函数来打印表头和 car_objects 中的多个条目。

print pad("", "name") + " ".join(pad(f.upper(), f) for f in fields)
for name, car in car_objects.items():
    print pad(name, "name") + " ".join(pad(car[f], f) for f in fields)

这应该没问题,前提是 car_objects 的元素是 Python 字典。如果不是,可以尝试把上面代码中的 car[f] 替换成 getattr(c, f)

更新:当然,完美对齐表格的列只有在你知道所有行的内容后才能做到。如果你需要在 从数据库读取条目时 就打印它们,你就得“猜测”需要添加多少空格,以便字符串在表格中对齐。这样会简单很多。只需在打印表头的 for 循环之前加上这一行:

print (" " * 20) + " ".join(f.upper().ljust(10) for f in fields)

然后在你的循环中,在 yield 之前加上这一行:

print name.ljust(20) + " ".join(str(getattr(car, f)).ljust(10) for f in fields)

str.ljust(n) 是一个标准的字符串函数,它会把字符串左对齐,宽度为 n 个字符。还有类似的函数可以实现右对齐和居中对齐,分别是 rjustcenter。而且,由于你的汽车似乎是某个类的实例,你可以使用内置函数 getattr(<object>, <attribute name>) 来获取汽车的各个属性(这和你的 getVariable 方法类似)。

想了解更多关于字符串格式化的内容,可以查看这个 Python 文档页面

撰写回答