LINUX.ORG.RU

Разбить dict на строки python?

 ,


0

2

Есть такой вот словарь:

a[0] = "{'id': 1, 'nickname': 'bla', 'email': 'bla@mail.ru', 'password': '63a9f0ea7bb98050796b649e85481845', 'reg_date': datetime.datetime(2018, 11, 13, 17, 27, 21), 'ip': '127.0.0.1', 'user_agent': 'Mozilla/5.0 (Windows NT 6.1; rv:16.0) Gecko/20100101 Firefox/16.0', 'phone': '88000000000'}"
a[1] = "{'id': 2, 'nickname': 'blabla', 'email': 'blabla@mail.ru', 'password': 'dd4b21e9ef71e1291183a46b913ae6f2', 'reg_date': datetime.datetime(2018, 11, 25, 17, 17, 1), 'ip': '127.0.0.1', 'user_agent': 'Mozilla/5.0 (Windows NT 6.1; rv:16.0) Gecko/20100101 Firefox/16.0', 'phone': '88000000001'}"
Как разбить его на значения в строки? И еще бы вытащить индексы и знать их количество?



Последнее исправление: bad_master (всего исправлений: 1)

3 раза прочитал и не понял что тебе сделать надо. Давай описывай нормально.

ggrn ★★★★★
()

Есть такой вот словарь

Hint: такого словаря не должно быть, а должна быть сериализуемая структура JSON.

vvn_black ★★★★★
()
Ответ на: комментарий от ggrn

куски строки 1,3,5(id,nickname,…) и т.д. это индексы ассоциативного массива,2,4,6(1,bla,..) и т.д. это его значения, мне они и нужны

bad_master
() автор топика
Последнее исправление: bad_master (всего исправлений: 2)
a={}
a[0] = {'id': 1, 'nickname': 'bla', 'email': 'bla@mail.ru', 'password': '63a9f0ea7bb98050796b649e85481845', 'reg_date': '2018, 11, 13, 17, 27, 21', 'ip': '127.0.0.1', 'user_agent': 'Mozilla/5.0 (Windows NT 6.1; rv:16.0) Gecko/20100101 Firefox/16.0', 'phone': '88000000000'}

x = str(a[0].get("id"))+' '+str(a[0].get("nickname"))
print(x)

Нечто такое?

обрати внимание datetime.datetime(2018, 11, 13, 17, 27, 21) – это косяк, прям косяк косяк

Morin ★★★★
()
Последнее исправление: Morin (всего исправлений: 1)
Ответ на: комментарий от bad_master

‘reg_date’: datetime.datetime(2018, 11, 13, 17, 27, 21),

Приведи datetime к строке, при помощи strftime(ТУТ НУЖНЫЙ ТЕБЕ ФОРМАТ)

ggrn ★★★★★
()
Последнее исправление: ggrn (всего исправлений: 1)
Ответ на: комментарий от bad_master
a[0] = eval("{'id': 1, 'nickname': 'bla', 'email': 'bla@mail.ru', 'password': '63a9f0ea7bb98050796b649e85481845', 'reg_date': datetime.datetime(2018, 11, 13, 17, 27, 21), 'ip': '127.0.0.1', 'user_agent': 'Mozilla/5.0 (Windows NT 6.1; rv:16.0) Gecko/20100101 Firefox/16.0', 'phone': '88000000000'}")
AntonI ★★★★
()
Ответ на: комментарий от bad_master

А тебе надо было перебирать его в цикле? Ты хотел разбить, я его разбил. Описывай задачу полностью, я не хочу играть в бабку-угадку.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 3)
In [18]: data
Out[18]: "{'id': 1, 'nickname': 'bla', 'email': 'bla@mail.ru', 'password': '63a9f0ea7bb98050796b649e85481845', 'reg_date': datetime.datetime(2018, 11, 13, 17, 27, 21), 'ip': '127.0.0.1', 'user_agent': 'Mozilla/5.0 (Windows NT 6.1; rv:16.0) Gecko/20100101 Firefox/16.0', 'phone': '88000000000'}"

In [19]: entry = eval(data); type(entry)
Out[19]: dict

In [20]: entry
Out[20]: 
{'email': 'bla@mail.ru',
 'id': 1,
 'ip': '127.0.0.1',
 'nickname': 'bla',
 'password': '63a9f0ea7bb98050796b649e85481845',
 'phone': '88000000000',
 'reg_date': datetime.datetime(2018, 11, 13, 17, 27, 21),
 'user_agent': 'Mozilla/5.0 (Windows NT 6.1; rv:16.0) Gecko/20100101 Firefox/16.0'}
thunar ★★★★★
()
Ответ на: комментарий от bad_master
//i = i + 1
i += 1
//while i < len(a[0]):
Зачем len(a[0]) раз заводть в tableWidget список значений всех полей?
crutch_master ★★★★★
()
Ответ на: комментарий от thunar

Ну тогда всё таки нужно ждасть от ТСа чёткую формулировку задачи.

Да. Я понял примерно, что он хочет, то тоже хочу это узнать он него, мухахахаха.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

он зачем-то хочет перебирать это в цикле, хотя все уже сделано для удобства в виде словаря, ну видимо так задачу поставили через жО

либо он читает задание через опять же жО (:

Morin ★★★★
()
Ответ на: комментарий от crutch_master

Надо бы в self.tableWidget.setItem(j, i, QTableWidgetItem(words)) в каждую ячейку записать значения которые мы разбили в строку

bad_master
() автор топика
Ответ на: комментарий от bad_master

блин, открой уже справку

на тебе итератор

for key, value in a[0].items():
    print(value)
Morin ★★★★
()
Ответ на: комментарий от bad_master

Т.к. нормальной формулировкой вы нас обделили, попробую угадать

t = {"ник" : "bad_master", "Задача" : "Кто знает?"}
for i, p in enumerate(t):
    print(i, p, t[p])

AKonia ★★
()
Последнее исправление: AKonia (всего исправлений: 1)
Ответ на: комментарий от AKonia

надо вот в таблицу занести каждый столбик и строку, у меня пока что получается все в каждую ячейку вписать, а хочу чтобы id в первый столбец, nickname во 2й, почта в третий, пароль в четвертый и т.д.

bad_master
() автор топика
Последнее исправление: bad_master (всего исправлений: 1)
Ответ на: комментарий от bad_master

А в чём проблема ? Неужели трудно из моего примера скормить значения в функцию установки значений виджетов ?

t = {"ник" : "bad_master", "Задача" : "Кто знает?"}
for i, p in enumerate(t):
    self.tableWidget.setItem(1, i+1, QTableWidgetItem(p))
    self.tableWidget.setItem(2, i+1, QTableWidgetItem(t[p]))

Если подвох в том, что у вас не словарь, а массив из строк(внутри которых словарь), то сверху в цикле:

for t in [eval(tablized) for tablized in a]:
AKonia ★★
()
Последнее исправление: AKonia (всего исправлений: 7)

Перестаньте кормить XY проблему

Goury ★★★★★
()
Ответ на: комментарий от bad_master

надо вот в таблицу занести каждый столбик и строку, у меня пока что получается все в каждую ячейку вписать

Вооот. Почему это надо вытягивать из тебя терморектальным методом?

        j = 0
        for row in a:
            i = 0
            for value in row.values():
                self.tableWidget.setItem(j, i, QTableWidgetItem(value))
                i += 1
            j += 1
Кто-нибудь этот кусок может лучше переписать? Решил выучить пистон, как берусь, каждый раз блевануть охота.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

там смешнее будет, когда в словаре будет пропущен кей, ибо нулевой ибо в его не заполнили :)

но кто мы чтоб судить, правда?

Morin ★★★★
()
Ответ на: комментарий от Morin

там смешнее будет, когда в словаре будет пропущен кей
но кто мы чтоб судить, правда?

Ну сделай nullcheck как надо. Я правда хз, как на этой херне надо писать.

crutch_master ★★★★★
()
Ответ на: комментарий от Shadow

на никнейм погляди :)

не ну как задачу описали, так и отвечаем))) это я просто к граблям присматриваюсь, а их можно еще накопать

Morin ★★★★
()
Ответ на: комментарий от crutch_master

хз из чего портянка словарей составлена.

На мой взгляд словарь как раз чтоб не париться, если один из ключей не указан, то его просто не будет в словаре. если тупо перебираем элементы без ключей, то столбцы поедут

конечно это все догадки, что кто-то не хотел фиксированный формат словаря

Morin ★★★★
()
Ответ на: комментарий от bad_master

тебя уже в это выше тыкали

действительно xy

Morin ★★★★
()
Ответ на: комментарий от crutch_master

Я новичок, это пишу свою первую программу. Нет зп, буду книгу читать чтобы хоть что-то знать. Если работает то всех благодарю

bad_master
() автор топика
Ответ на: комментарий от bad_master

И тем не менее это json. Точнее, json рукожопа. В отличие от json здорового человека, перепутаны кавычки (должны быть двойные) и, как заметил Morin, грубый косяк с datetime

Нужно вломить коллеге, который написал экспорт, а не пытаться изобрести гнутый молоток

router ★★★★★
()
Ответ на: комментарий от bad_master

Лучше давай всю задачу прямо с примера в виде файла с поступающими данными (сами данные можешь заменить на имярек1 имярек2 и так далее, но дать полный минимальный пример) как есть и нормально обсудим как её правильно решать, потому что то что я увидел в треде (не только от тебя но и в виде советов) ужасно настолько, что у меня волосы дыбом встали.

ЗЫ

Как выше упомянули коллеге надо вломить по рукам за создание велосипедов.

ЗЗЫ

Самый ужас от твоей формулировки:

Если работает то всех благодарю

Вот от этого прямо кровь из глаз.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 2)
Ответ на: комментарий от crutch_master

Ну так-то да, eval — это дубовое и небезопасное решение. Лучше сначала пройтись по тексту регэкспом или файндом дабы поменять дэйттаймы на обычный массив и поправить кавычки, а потом уже грузить всё джосоном и где надо вызвать дэйттайм в явном виде.

thunar ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.