मैं पायथन के साथ ASCII तालिकाओं को कैसे प्रिंट कर सकता हूं? [बन्द है]


81

मैं इस तरह से सुंदर-मुद्रित तालिकाओं का रास्ता तलाश रहा हूं:

=======================
| column 1 | column 2 |
=======================
| value1   | value2   |
| value3   | value4   |
=======================

मैंने पाया asciitable पुस्तकालय लेकिन यह सीमाओं को नहीं करता है, आदि मुझे डेटा आइटम के किसी भी जटिल स्वरूपण की आवश्यकता नहीं है, वे बस तार हैं। मुझे इसे ऑटो-आकार के स्तंभों की आवश्यकता है।

क्या अन्य पुस्तकालय या विधियाँ मौजूद हैं, या क्या मुझे अपना स्वयं का लेखन करने में कुछ मिनट खर्च करने की आवश्यकता है?


आपके लिए ऐसा करने के लिए डॉक्यूटिल्स का उपयोग क्यों नहीं किया जाता है?
S.Lott

टेबल को क्या कहते हैं? तालिका में डेटा कैसे व्यवस्थित किया जाता है? मान 1, मान 2, मान 3, मान 4 ... एक सूची में क्रमिक मूल्य हैं? मुझे लगता है कि इस तरह के एक सरल प्रदर्शन को प्राप्त करने के लिए फ़ोमैट () पर्याप्त है, लंबे समय के दौरान सीखने की ज़रूरत नहीं है एक ट्यूटोरियल जो बताता है कि एक पुस्तकालय का उपयोग करके समय कैसे प्राप्त करें
मई'11

2
@korona: नहीं, मैं एक सुझाव नहीं दे रहा था। मैं एक सवाल पूछ रहा था। मुझे कोई सुराग नहीं है कि @kdt क्या जानता है या नहीं जानता है। मानने के बजाय, मैं पूछने के लिए मजबूर महसूस करता हूं।
S.Lott

5
मुझे आप की तरह लग रहा था वास्तव में यह मानते हुए कि वह docutils के बारे में जानता है। शायद वह नहीं है?
कोरोना

2
@ S.Lott मैंने docutils पर देखा है, और जब यह html, लेटेक्स, आदि के लिए पाठ को परिवर्तित करने के लिए निश्चित रूप से बहुत अच्छा है, तो मुझे अच्छा टेक्स्ट टेबल बनाने के लिए कोई रास्ता नहीं दिखाई देता है , कॉलम के साथ लाइन अप और सुंदर लग रही है निश्चित-चौड़ाई वाले फ़ॉन्ट। क्या आपने kdt के लक्ष्य को गलत समझा, या मैं कुछ याद कर रहा हूं?
nealmcb

जवाबों:


72

मैंने इस प्रश्न को बहुत समय पहले पढ़ा है, और तालिकाओं के लिए अपना सुंदर-प्रिंटर लिखना समाप्त कर दिया है: tabulate

मेरा उपयोग मामला है:

  • मैं ज्यादातर समय एक-लाइनर चाहता हूं
  • जो मेरे लिए सबसे अच्छा स्वरूपण करने के लिए पर्याप्त स्मार्ट है
  • और विभिन्न सादे-पाठ प्रारूपों का उत्पादन कर सकते हैं

आपके उदाहरण को देखते हुए, gridसंभवतः सबसे समान आउटपुट स्वरूप है:

from tabulate import tabulate
print tabulate([["value1", "value2"], ["value3", "value4"]], ["column 1", "column 2"], tablefmt="grid")
+------------+------------+
| column 1   | column 2   |
+============+============+
| value1     | value2     |
+------------+------------+
| value3     | value4     |
+------------+------------+

अन्य समर्थित प्रारूप हैं plain(कोई पंक्तियाँ नहीं), simple(पंडोक सरल तालिकाओं), pipe(जैसे PHP मार्कडाउन एक्स्ट्रा में तालिकाओं), orgtbl(Emacs 'ऑर्ग-मोड rstमें तालिकाओं की तरह ), (पुनर्संरचना में साधारण तालिकाओं की तरह)। gridऔर orgtblEmacs में आसानी से संपादन योग्य हैं।

प्रदर्शन-वार, tabulateकी तुलना में थोड़ा धीमा है asciitable, लेकिन बहुत तेजी से PrettyTableऔर texttable

PS मैं दशमलव कॉलम द्वारा संख्याओं को संरेखित करने का भी बड़ा प्रशंसक हूं । तो यह संख्याओं के लिए डिफ़ॉल्ट संरेखण है यदि कोई हो (अतिश्योक्तिपूर्ण)।


4
मुझे सिर्फ एक सारणीबद्ध समाधान की आवश्यकता थी और आपके पुस्तकालय को खोजने के लिए पर्याप्त भाग्यशाली था! एक आकर्षण की तरह काम करता है: डी मामले में आप सुन रहे हैं, सिर्फ थैंक यू कहना चाहते थे :)
deepak

2
हां, मैं सुन रहा हूं। आपके दयालु शब्द के लिए धन्यवाद। सकारात्मक प्रतिक्रिया प्राप्त करना वास्तव में अच्छा है।
साटनिन

1
हाय, @sastanin सबसे पहले, इतनी अच्छी लाइब्रेरी के लिए बहुत-बहुत धन्यवाद। क्या मुझे पता है कि टर्मिनल की पूरी चौड़ाई में टेबल प्रिंट करने का कोई विकल्प है?
वैलिडस ओकुलस

1
हेलो सस्तानिन, बस इस बेहद आसान पैकेज के लिए धन्यवाद देने के लिए यहां एक शब्द छोड़ना चाहता था। एक आकर्षण की तरह काम करता है और मुझे अपनी खुद की लिखने की परेशानी से बचाया। साझा करने के लिए बहुत बहुत धन्यवाद !
वैलेंटाइन बी।

1
आपकी सुविधा सूची एक ख़ामोशी है। कोशिश की ansi बच सामान, सही काम करता है। इसके लिए धन्यवाद!
रेड पिल

37

यहां एक त्वरित और गंदा छोटा कार्य है जो मैंने एसक्यूएपी एपीआई पर केवल एसक्यूएपी प्रश्नों से परिणाम प्रदर्शित करने के लिए लिखा था। यह एक या एक से अधिक अनुक्रम के इनपुट की अपेक्षा करता हैnamedtuples तालिका पंक्तियों के रूप । यदि केवल एक रिकॉर्ड है, तो वह इसे अलग तरीके से प्रिंट करता है।

यह मेरे लिए आसान है और आपके लिए एक शुरुआती बिंदु हो सकता है:

def pprinttable(rows):
  if len(rows) > 1:
    headers = rows[0]._fields
    lens = []
    for i in range(len(rows[0])):
      lens.append(len(max([x[i] for x in rows] + [headers[i]],key=lambda x:len(str(x)))))
    formats = []
    hformats = []
    for i in range(len(rows[0])):
      if isinstance(rows[0][i], int):
        formats.append("%%%dd" % lens[i])
      else:
        formats.append("%%-%ds" % lens[i])
      hformats.append("%%-%ds" % lens[i])
    pattern = " | ".join(formats)
    hpattern = " | ".join(hformats)
    separator = "-+-".join(['-' * n for n in lens])
    print hpattern % tuple(headers)
    print separator
    _u = lambda t: t.decode('UTF-8', 'replace') if isinstance(t, str) else t
    for line in rows:
        print pattern % tuple(_u(t) for t in line)
  elif len(rows) == 1:
    row = rows[0]
    hwidth = len(max(row._fields,key=lambda x: len(x)))
    for i in range(len(row)):
      print "%*s = %s" % (hwidth,row._fields[i],row[i])

नमूना उत्पादन:

pkid | fkn | एनपीआई
------------------------------------- + ------------ -------------------------- + ----
405fd665-0a2f-4f69-7320-be01201752ec | 8c9949b9-552e-e448-64e2-74292834c73e | ०
5b517507-2a42-ad2e-98dc-8c9ac6152afa | f972bee7-f5a4-8532-c4e5-2e82897b10f6 | ०
2f960dfc-b67a-26be-d1b3-9b105535e0a8 | ec3e1058-8840-c9f2-3b25-2488f8b3a8af | 1
c71b28a3-5299-7f4d-f27a-7ad8aeadafe0 | 72d25703-4735-310b-2e06-ff76af1e45ed | ०
3b0a5021-a52b-9ba0-1439-d5aafcf348e7 | d81bb78a-d984-e957-034d-87434acb4e97 | 1
96c36bb7-c4f4-2787-ada8-4aadc17d1123 | c171fe85-33e2-6481-0791-2922267e8777 | 1
95d0f85f-71da-bb9a-2d80-fe27f7c02fe2 | 226f964c-028d-d6de-bf6c-688d2908c5ae | 1
132aa774-42e5-3d3f-498b-50b44a89d401 | 44e31f89-d089-8afc-f4b1-ada051c01474 | 1
ff91641a-5802-be02-bece-79bca993fdbc | 33d8294a-053d-6ab4-94d4-890b47fcf70d | 1
f3196e15-5b61-e92d-e717-f00ed93fe8ae | 62fa4566-5ca2-4a36-f872-4d00f7abadcf | 1

उदाहरण

>>> from collections import namedtuple
>>> Row = namedtuple('Row',['first','second','third'])
>>> data = Row(1,2,3)
>>> data
Row(first=1, second=2, third=3)
>>> pprinttable([data])
 first = 1
second = 2
 third = 3
>>> pprinttable([data,data])
first | second | third
------+--------+------
    1 |      2 |     3
    1 |      2 |     3

@MattH आप एक उदाहरण के साथ इस फ़ंक्शन का उपयोग दिखा सकते हैं?
theAlse

1
@ माथे धन्यवाद, लेकिन बड़ी संख्या इसे तुरंत दुर्घटनाग्रस्त करती है। TypeError: ऑब्जेक्ट 'int' का कोई लेन () नहीं है।
TheAlse

@Alborz: मैंने इसे दूसरों के लिए एक शुरुआती बिंदु के रूप में पोस्ट किया है, यदि आप चाहें तो इसे अपने डेटा प्रकारों से निपटने के लिए अनुकूलित करें। यद्यपि यह त्रुटि किस लाइन से आई है, इस पर निर्भर करते हुए, आप फ़ंक्शन को
म्यूट

1
@ मुझे पता है कि आपने बग की पहचान की थी, इसे len(str(max(...)))लेंस.एपेंड लाइन में बनाकर। तो अब अगर कॉलम में एक संख्या कॉलम हैडर से अधिक व्यापक है, तो हम अभी भी अच्छे हैं। BTW, मैट - अधिकतम करने के लिए "कुंजी" तर्क का प्यारा उपयोग ()!
nealmcb

19

किसी कारण जब मैं अपने गूगल खोज में 'docutils' शामिल के लिए मैं भर में ठोकर खाई texttable , जो मैं के लिए क्या देख रहा हूँ हो रहा है।


2
अच्छा है। स्वचालित कॉलम चौड़ाई का पता लगाने में कमी; उपयोग: pastebin.com/SAsPJUxM
कोस

12

मैंने भी अपना हल खुद लिखा। मैंने इसे सरल रखने की कोशिश की।

https://github.com/Robpol86/terminaltables

from terminaltables import AsciiTable
table_data = [
    ['Heading1', 'Heading2'],
    ['row1 column1', 'row1 column2'],
    ['row2 column1', 'row2 column2']
]
table = AsciiTable(table_data)
print table.table
+--------------+--------------+
| Heading1     | Heading2     |
+--------------+--------------+
| row1 column1 | row1 column2 |
| row2 column1 | row2 column2 |
+--------------+--------------+

table.inner_heading_row_border = False
print table.table
+--------------+--------------+
| Heading1     | Heading2     |
| row1 column1 | row1 column2 |
| row2 column1 | row2 column2 |
+--------------+--------------+

table.inner_row_border = True
table.justify_columns[1] = 'right'
table.table_data[1][1] += '\nnewline'
print table.table
+--------------+--------------+
| Heading1     |     Heading2 |
+--------------+--------------+
| row1 column1 | row1 column2 |
|              |      newline |
+--------------+--------------+
| row2 column1 | row2 column2 |
+--------------+--------------+

9

मैंने अभी-अभी इस उद्देश्य के लिए कार्यकाल जारी किया है । उदाहरण के लिए, यह

import termtables as tt

tt.print(
    [[1, 2, 3], [613.23236243236, 613.23236243236, 613.23236243236]],
    header=["a", "bb", "ccc"],
    style=tt.styles.ascii_thin_double,
    padding=(0, 1),
    alignment="lcr"
)

आपको मिल जाता है

+-----------------+-----------------+-----------------+
| a               |       bb        |             ccc |
+=================+=================+=================+
| 1               |        2        |               3 |
+-----------------+-----------------+-----------------+
| 613.23236243236 | 613.23236243236 | 613.23236243236 |
+-----------------+-----------------+-----------------+

डिफ़ॉल्ट रूप से, तालिका को यूनिकोड बॉक्स-ड्राइंग वर्णों के साथ प्रदान किया जाता है ,

┌─────────────────┬─────────────────┬─────────────────┐
│ a               │       bb        │             ccc │
╞═════════════════╪═════════════════╪═════════════════╡
│ 123 │
├─────────────────┼─────────────────┼─────────────────┤
│ 613.23236243236613.23236243236613.23236243236 │
└─────────────────┴─────────────────┴─────────────────┘

शब्दावलियाँ बहुत विन्यास योग्य हैं; बाहर की जाँच परीक्षण और उदाहरण के लिए।


मेरी इच्छा है कि आप लाइब्रेरी को रैपिंग लॉजिक को प्रदर्शित करने के लिए अधिकतम कॉलम सेट कर सकते हैं।
कंग मिन

7

आप ब्यूटीफुल ट्राई कर सकते हैं । यह वही करता है जो आप करना चाहते हैं। इसका एक उदाहरण यह प्रलेखन है

>>> from beautifultable import BeautifulTable
>>> table = BeautifulTable()
>>> table.column_headers = ["name", "rank", "gender"]
>>> table.append_row(["Jacob", 1, "boy"])
>>> table.append_row(["Isabella", 1, "girl"])
>>> table.append_row(["Ethan", 2, "boy"])
>>> table.append_row(["Sophia", 2, "girl"])
>>> table.append_row(["Michael", 3, "boy"])
>>> print(table)
+----------+------+--------+
|   name   | rank | gender |
+----------+------+--------+
|  Jacob   |  1   |  boy   |
+----------+------+--------+
| Isabella |  1   |  girl  |
+----------+------+--------+
|  Ethan   |  2   |  boy   |
+----------+------+--------+
|  Sophia  |  2   |  girl  |
+----------+------+--------+
| Michael  |  3   |  boy   |
+----------+------+--------+

/usr/local/lib/python3.8/site-packages/beautifultable/utils.py:113: FutureWarning: 'BeautifulTable.column_headers' has been deprecated in 'v1.0.0' and will be removed in 'v1.2.0'. Use 'BTColumnCollection.header' instead. warnings.warn(message, FutureWarning)
डेन्ड्रिक्स डेक्स

/usr/local/lib/python3.8/site-packages/beautifultable/utils.py:113: FutureWarning: 'BeautifulTable.append_row' has been deprecated in 'v1.0.0' and will be removed in 'v1.2.0'. Use 'BTRowCollection.append' instead. warnings.warn(message, FutureWarning)
डेन्ड्रिक्स डेक्स

6

मैट के संस्करण को स्वीकार करने के लिए डिज़ाइन किए गए w3m का उपयोग कर संस्करण स्वीकार करता है:

import subprocess
import tempfile
import html
def pprinttable(rows):
    esc = lambda x: html.escape(str(x))
    sour = "<table border=1>"
    if len(rows) == 1:
        for i in range(len(rows[0]._fields)):
            sour += "<tr><th>%s<td>%s" % (esc(rows[0]._fields[i]), esc(rows[0][i]))
    else:
        sour += "<tr>" + "".join(["<th>%s" % esc(x) for x in rows[0]._fields])
        sour += "".join(["<tr>%s" % "".join(["<td>%s" % esc(y) for y in x]) for x in rows])
    with tempfile.NamedTemporaryFile(suffix=".html") as f:
        f.write(sour.encode("utf-8"))
        f.flush()
        print(
            subprocess
            .Popen(["w3m","-dump",f.name], stdout=subprocess.PIPE)
            .communicate()[0].decode("utf-8").strip()
        )

from collections import namedtuple
Row = namedtuple('Row',['first','second','third'])
data1 = Row(1,2,3)
data2 = Row(4,5,6)
pprinttable([data1])
pprinttable([data1,data2])

का परिणाम:

┌───────┬─┐
│ first │1│
├───────┼─┤
│second │2│
├───────┼─┤
│ third │3│
└───────┴─┘
┌─────┬───────┬─────┐
│first│second │third│
├─────┼───────┼─────┤
│123    │
├─────┼───────┼─────┤
│456    │
└─────┴───────┴─────┘

5

यदि आप स्तंभ और पंक्ति के विस्तार के साथ एक तालिका चाहते हैं, तो मेरे पुस्तकालय को डैश करने का प्रयास करें

from dashtable import data2rst

table = [
        ["Header 1", "Header 2", "Header3", "Header 4"],
        ["row 1", "column 2", "column 3", "column 4"],
        ["row 2", "Cells span columns.", "", ""],
        ["row 3", "Cells\nspan rows.", "- Cells\n- contain\n- blocks", ""],
        ["row 4", "", "", ""]
    ]

# [Row, Column] pairs of merged cells
span0 = ([2, 1], [2, 2], [2, 3])
span1 = ([3, 1], [4, 1])
span2 = ([3, 3], [3, 2], [4, 2], [4, 3])

my_spans = [span0, span1, span2]

print(data2rst(table, spans=my_spans, use_headers=True))

कौन से आउटपुट:

+----------+------------+----------+----------+
| Header 1 | Header 2   | Header3  | Header 4 |
+==========+============+==========+==========+
| row 1    | column 2   | column 3 | column 4 |
+----------+------------+----------+----------+
| row 2    | Cells span columns.              |
+----------+----------------------------------+
| row 3    | Cells      | - Cells             |
+----------+ span rows. | - contain           |
| row 4    |            | - blocks            |
+----------+------------+---------------------+

ERROR: Spans must be a list of lists
cz

2

मुझे पता है कि यह सवाल थोड़ा पुराना है लेकिन यहाँ इस पर मेरा प्रयास है:

https://gist.github.com/lonetwin/4721748

यह थोड़ा अधिक पठनीय IMHO है (हालांकि यह @ मैट के समाधानों की तरह एकल / कई पंक्तियों के बीच अंतर नहीं करता है, और न ही इसका उपयोग NamedTuples करता है)।


2

मैं इस छोटे उपयोगिता समारोह का उपयोग करता हूं।

def get_pretty_table(iterable, header):
    max_len = [len(x) for x in header]
    for row in iterable:
        row = [row] if type(row) not in (list, tuple) else row
        for index, col in enumerate(row):
            if max_len[index] < len(str(col)):
                max_len[index] = len(str(col))
    output = '-' * (sum(max_len) + 1) + '\n'
    output += '|' + ''.join([h + ' ' * (l - len(h)) + '|' for h, l in zip(header, max_len)]) + '\n'
    output += '-' * (sum(max_len) + 1) + '\n'
    for row in iterable:
        row = [row] if type(row) not in (list, tuple) else row
        output += '|' + ''.join([str(c) + ' ' * (l - len(str(c))) + '|' for c, l in zip(row, max_len)]) + '\n'
    output += '-' * (sum(max_len) + 1) + '\n'
    return output

print get_pretty_table([[1, 2], [3, 4]], ['header 1', 'header 2'])

उत्पादन

-----------------
|header 1|header 2|
-----------------
|1       |2       |
|3       |4       |
-----------------

1
आप प्रत्येक स्तंभ के बीच एक स्थान जोड़ रहे हैं output += '|' + ''.join([h + ' ' * (l - len(h)) + '|' for h, l in zip(header, max_len)]) + '\n' लेकिन विभाजक रेखाओं में नहीं। के -रूप में सरल के रूप में कुछ के साथ है कि पंक्ति का विस्तार कर सकते हैंoutput = '-' * (sum(max_len) + 1 + len(header)) + '\n'
ochawkeye

1

यहाँ मेरा समाधान है:

def make_table(columns, data):
    """Create an ASCII table and return it as a string.

    Pass a list of strings to use as columns in the table and a list of
    dicts. The strings in 'columns' will be used as the keys to the dicts in
    'data.'

    Not all column values have to be present in each data dict.

    >>> print(make_table(["a", "b"], [{"a": "1", "b": "test"}]))
    | a | b    |
    |----------|
    | 1 | test |
    """
    # Calculate how wide each cell needs to be
    cell_widths = {}
    for c in columns:
        values = [str(d.get(c, "")) for d in data]
        cell_widths[c] = len(max(values + [c]))

    # Used for formatting rows of data
    row_template = "|" + " {} |" * len(columns)

    # CONSTRUCT THE TABLE

    # The top row with the column titles
    justified_column_heads = [c.ljust(cell_widths[c]) for c in columns]
    header = row_template.format(*justified_column_heads)
    # The second row contains separators
    sep = "|" + "-" * (len(header) - 2) + "|"
    # Rows of data
    rows = []
    for d in data:
        fields = [str(d.get(c, "")).ljust(cell_widths[c]) for c in columns]
        row = row_template.format(*fields)
        rows.append(row)

    return "\n".join([header, sep] + rows)

1
from sys import stderr, stdout    
def create_table(table: dict, full_row: bool = False) -> None:

        min_len = len(min((v for v in table.values()), key=lambda q: len(q)))
        max_len = len(max((v for v in table.values()), key=lambda q: len(q)))

        if min_len < max_len:
            stderr.write("Table is out of shape, please make sure all columns have the same length.")
            stderr.flush()
            return

        additional_spacing = 1

        heading_separator = '| '
        horizontal_split = '| '

        rc_separator = ''
        key_list = list(table.keys())
        rc_len_values = []
        for key in key_list:
            rc_len = len(max((v for v in table[key]), key=lambda q: len(str(q))))
            rc_len_values += ([rc_len, [key]] for n in range(len(table[key])))

            heading_line = (key + (" " * (rc_len + (additional_spacing + 1)))) + heading_separator
            stdout.write(heading_line)

            rc_separator += ("-" * (len(key) + (rc_len + (additional_spacing + 1)))) + '+-'

            if key is key_list[-1]:
                stdout.flush()
                stdout.write('\n' + rc_separator + '\n')

        value_list = [v for vl in table.values() for v in vl]

        aligned_data_offset = max_len

        row_count = len(key_list)

        next_idx = 0
        newline_indicator = 0
        iterations = 0

        for n in range(len(value_list)):
            key = rc_len_values[next_idx][1][0]
            rc_len = rc_len_values[next_idx][0]

            line = ('{:{}} ' + " " * len(key)).format(value_list[next_idx], str(rc_len + additional_spacing)) + horizontal_split

            if next_idx >= (len(value_list) - aligned_data_offset):
                next_idx = iterations + 1
                iterations += 1
            else:
                next_idx += aligned_data_offset

            if newline_indicator >= row_count:
                if full_row:
                    stdout.flush()
                    stdout.write('\n' + rc_separator + '\n')
                else:
                    stdout.flush()
                    stdout.write('\n')

                newline_indicator = 0

            stdout.write(line)
            newline_indicator += 1

        stdout.write('\n' + rc_separator + '\n')
        stdout.flush()

उदाहरण:

table = {
        "uid": ["0", "1", "2", "3"],
        "name": ["Jon", "Doe", "Lemma", "Hemma"]
    }

create_table(table)

आउटपुट:

uid   | name       | 
------+------------+-
0     | Jon        | 
1     | Doe        | 
2     | Lemma      | 
3     | Hemma      | 
------+------------+-

2
आप कुछ स्पष्टीकरण के साथ इसे बढ़ाकर अपने कोड-ही उत्तर को बेहतर बना सकते हैं।
यून्नोस्क

-1

यह केवल बिल्टइन मॉड्यूल के साथ किया जा सकता है जो सूची और स्ट्रिंग की समझ का उपयोग करते हैं। सभी एक ही प्रारूप के शब्दकोशों की सूची स्वीकार करता है ...

def tableit(dictlist):
    lengths = [ max(map(lambda x:len(x.get(k)), dictlist) + [len(k)]) for k in dictlist[0].keys() ]
    lenstr = " | ".join("{:<%s}" % m for m in lengths)
    lenstr += "\n"

    outmsg = lenstr.format(*dictlist[0].keys())
    outmsg += "-" * (sum(lengths) + 3*len(lengths))
    outmsg += "\n"
    outmsg += "".join(
        lenstr.format(*v) for v in [ item.values() for item in dictlist ]
    )
    return outmsg

कृपया अपने कोड का उपयोग करने का एक उदाहरण प्रस्तुत करें। tableit([dict(a='1', b='2', c='3'), dict(a='x', b='y', c='z')])
iuridiniz

आप पायथन 3 में बदलाव के बिना काम नहीं करते हैं, पंक्ति 2 होनी चाहिए:lengths = [ max(list(map(lambda x:len(x.get(k)), dictlist)) + [len(k)]) for k in dictlist[0].keys() ]
iuridiniz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.