Python - форматирование массива в список со ссылочным номером - PullRequest
0 голосов
/ 01 мая 2020

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

У меня есть 2 переменные:

"ссылка" - это идентификатор каждого члена в массиве «names». «names» - это массив с именами, разделенными запятой, и в этом же массиве у меня есть дата рождения.

def printSubjects(bin_to_id):
    for reference, names in bin_to_id.items():
        namelist = str(names)
        print(reference, namelist)

Результат выглядит так:

28705 ([Jonh Daves, George Denis, Alan Denis], ['1988-03-13', '1989-03-04'])
28995 ([Ophelia James, David Daves, Alex Jonson], ['1998-03-15'])

Но мне нужно чтобы получить следующий формат, используя print():

28705|Jonh Daves|1988-03-13
28705|Jonh Daves|1989-03-04
28705|Alan Denis|1989-03-04
28705|Alan Denis|1988-03-13
28705|George Denis|1989-03-04
28705|George Denis|1988-03-13
28995|Ophelia James|1998-03-15
28995|David Daves|1998-03-15
28995|Alex Jonson|1998-03-15

кто-то может мне помочь или дать мне представление о том, как это сделать?

Я ценю вашу помощь.

Привет

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Это работает !!!, но теперь у меня проблема со значениями, у которых нет даты, например:

 1234 ([Jonh, Paul, Richard] , [])  

эти записи исчезают с вывода, как их использовать?

Output: 

1234|Jon|None
1234|Paul|None
1234|Richard|None

or:

1234|Jon|
1234|Paul|
1234|Richard|

Спасибо !!!

Обновление:

def printSubjects(bin_to_id):
    for reference, names in bin_to_id.items():
        names, dates = names
        if not dates: # For values null or empy assign a 'None' Value
            dates = ['None']
        for name in names:
            for date in dates:
                print(reference, name, date)
                with open('List.txt', 'a') as file: # Write the output into a txt file with the following format.
                    print(reference, "|", name, "|", date, file=file)

Спасибо!

0 голосов
/ 01 мая 2020

Я предполагаю, что словарь ввода выглядит следующим образом -

{
    28705: (["Jonh Daves", "George Denis", "Alan Denis"], ['1988-03-13', '1989-03-04']),
    28995: (["Ophelia James", "David Daves", "Alex Jonson"], ['1998-03-15'])
}

Исходя из этого предположения, я не понимаю, почему вы используете namelist = str(names) в вашем l oop. Я удалил эту строку из l oop, поскольку она не помогает ответить на ваш вопрос. Вот обновленная функция -

def printSubjects(bin_to_id):
    for reference, namesDates in bin_to_id.items():
        # namelist = str(names)
        names, dates = namesDates # Unpack the names list and the dates list
        for name in names: # Iterate through names
            for date in dates: # Iterate through dates
                print(reference, "|", name, "|", date)

Выход

28705 | Jonh Daves | 1988-03-13
28705 | Jonh Daves | 1989-03-04
28705 | George Denis | 1988-03-13
28705 | George Denis | 1989-03-04
28705 | Alan Denis | 1988-03-13
28705 | Alan Denis | 1989-03-04
28995 | Ophelia James | 1998-03-15
28995 | David Daves | 1998-03-15
28995 | Alex Jonson | 1998-03-15

Например, для ключа 28795 переменная namesDates равна (["Jonh Daves", "George Denis", "Alan Denis"], ['1988-03-13', '1989-03-04']).

Используя names, dates = namesDates, мы распаковываем namesDates, так что names равен ["Jonh Daves", "George Denis", "Alan Denis"], а dates равен ['1988-03-13', '1989-03-04']. Затем, используя два цикла for, мы повторяем имена, и для каждого имени мы повторяем все даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...