Список словаря

1

В списке можно добавить список. Но как я достигаю добавления в словаре?

    Symbols from __ctype_tab.o:
Name                  Value   Class        Type         Size     Line  Section
__ctype             |00000000|   D  |            OBJECT|00000004|     |.data
__ctype_tab         |00000000|   r  |            OBJECT|00000101|     |.rodata

Symbols from _ashldi3.o:
Name                  Value   Class        Type         Size     Line  Section
__ashldi3           |00000000|   T  |              FUNC|00000050|     |.text

Symbols from _ashrdi3.o:
Name                  Value   Class        Type         Size     Line  Section
__ashrdi3           |00000000|   T  |              FUNC|00000058|     |.text

Symbols from _fixdfdi.o:
Name                  Value   Class        Type         Size     Line  Section
__fixdfdi           |00000000|   T  |              FUNC|0000004c|     |.text
__fixunsdfdi        |        |   U  |            NOTYPE|        |     |*UND*

Как создать словарь, например:

dictOfTables {'__ctype_tab.o':{'__ctype': Name:...,Value:...,Class:...,Type:...,Size:...,Line:...,Section:...}} etc.

для вышеуказанного текста?

Теги:
list
dictionary

2 ответа

7

Добавление не имеет смысла для понятия словаря так же, как для списка. Вместо этого, более разумно говорить в терминах вставки и удаления ключа/значений, так как нет "конца" для добавления - dict неупорядочен.

Из вашего желаемого результата, похоже, вы хотите иметь диктофон dicts (т.е. {filename : { symbol : { key:value }}). Я думаю, вы можете получить это из своего ввода с чем-то вроде этого:

import re

header_re = re.compile('Symbols from (.*):')

def read_syms(f):
    """Read list of symbols from provided iterator and return dict of values"""
    d = {}
    headings=None
    for line in f:
        line = line.strip()
        if not line: return d  # Finished.

        if headings is None:
             headings = [x.strip() for x in line.split()]
             continue # First line is headings

        items = [x.strip() for x in line.split("|")]
        d[items[0]] = dict(zip(headings[1:], items[1:]))
    return d

f=open('input.txt')
d={}
for line in f:
    m=header_re.match(line)
    if m:
        d[m.group(1)] = read_syms(f)
  • 0
    Окончательный текст будет выглядеть следующим образом: {'_ashrdi3.o': {'__ashrdi3': {'Section': '.text', 'Value': '00000000', 'Line': '', 'Type': ' FUNC ',' Class ':' T ',' Size ':' 00000058 '}},' _ashldi3.o ': {' __ashldi3 ': {' Section ':' .text ',' Value ':' 00000000 ', 'Line': '', 'Type': 'FUNC', 'Class': 'T', 'Size': '00000050'}}, '_fixdfdi.o': {'__fixdfdi': {'Section': ' .text ',' Value ':' 00000000 ',' Line ':' ',' Type ':' FUNC ',' Class ':' T ',' Size ':' 0000004c '},' __fixunsdfdi ': {' Section ':' UND ',' Value ':' ',' Line ':' ',' Type ':' NOTYPE ',' Class ':' U ',' Size ':' '}}}
1

Посмотрите на упорядоченный словарь. Я не думаю, что это уже на официальном Python, но есть ссылочная реализация, доступная в PEP.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню