2013-11-27 2 views
0

Я уже задал один и тот же вопрос, но я чувствую, как я это перепутал, очень расплывчато. В принципе мне нужно изменить:Смена места размещения

data = 
[['15674' '24000' 'Manager' 'Gregory the 1st' 'John'], 
['15674' '24000' 'Manager' 'Gregory the 1st' 'John'], 
['15674' '24000' 'Manager' 'Gregory the 1st' 'John'], 
['15674' '24000' 'Manager' 'Gregory the 1st' 'John']] 

data = [number, salary,position, othernames, firstname] 

в:

data1= 
('John', 'Gregory the 1st',15674,'Manager',24000), 
('John', 'Gregory the 1st',15674,'Manager',24000), 
('John', 'Gregory the 1st',15674,'Manager',24000,) 
('John', 'Gregory the 1st',15674,'Manager',24000) 

data1 = (Firstname, othernames, number, position,salary) 

Я повторил, чтобы показать, что я мог бы получить файл с 100s сотрудников, которые должны иметь свою информацию повторно организованы и распечатаны как кортеж в этом порядке. Все элементы будут иметь одинаковую позицию, например. number[0], salary[1], position [2] однако средняя часть, которая является иными именами, может иметь несколько имен, поэтому у нее не будет определенной позиции. Первое имя, однако, будет только одним элементом, поэтому можно найти с list1[-1].

def ex1(): 
    b= input("Please enter a file name to be opened: ") 
    a = (b+".txt")  
    data =[]  
def employee(lanme, oname, num,title,salary): 
    return (lanme, oname, num, title, salary) 

def readfile(a): 
    try: 
     data =[] 
     check = open(a, 'r') 
     line =check.readlines() 
     for items in line: 
      breakup= items.split() 
      data.append(breakup) 
    except IOError as e : 
     print("Failed to open", fileName) 
readfile(a) 

EX1()

+1

ли данные на самом деле в списках? Первый блок кода здесь недействителен и потребуется какой-то синтаксический разбор, прежде чем элементы будут переупорядочены. –

+0

Я в замешательстве. Имеются ли в этих списках строки? –

+0

Данные извлекаются из текстового файла, который я сделал.Когда я распечатываю их после использования цикла, чтобы хранить всю информацию в виде одного большого списка в качестве данных = [['15674' '24000' 'Менеджер' 'Григорий 1' 'Джон'], ['15674' '24000' «Менеджер» «Григорий 1-й» «Джон», ['15674' '24000' 'Менеджер' 'Григорий 1' 'Джон'], ['15674' '24000' 'Менеджер' 'Григорий 1' «Джон»]] Мне нужно взять эту информацию и переставить ее в правильном порядке и превратить ее в кортеж. – Softey

ответ

0

Мое решение для списка списков, но это просто.

data = ["15674 24000 Manager Gregory the 1st John", "15674 24000 Manager Gregory the 1st John", 
     "15674 24000 Manager Gregory the 1st John", "15674 24000 Manager Gregory the 1st John"] 

data1 = [] 

for items in data: 
    splitNames = items.split() 
    number, salary, position, first, des1, des2, last = splitNames 
    data1.append([last, first + ' ' + des1 + ' ' + des2, number, position, salary]) 

for items in data1: 
    print items 

Результат:

['John', 'Gregory the 1st', '15674', 'Manager', '24000'] 
['John', 'Gregory the 1st', '15674', 'Manager', '24000'] 
['John', 'Gregory the 1st', '15674', 'Manager', '24000'] 
['John', 'Gregory the 1st', '15674', 'Manager', '24000'] 

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

Кортеж:

, если вы хотите быть список tupels просто переписать эту строку:

data1.append(tuple([last, first + ' ' + des1 + ' ' + des2, number, position, salary])) 

с использованием кортежа() см объяснение here из питона документации.

Результат:

('John', 'Gregory the 1st', '15674', 'Manager', '24000') 
('John', 'Gregory the 1st', '15674', 'Manager', '24000') 
('John', 'Gregory the 1st', '15674', 'Manager', '24000') 
('John', 'Gregory the 1st', '15674', 'Manager', '24000') 

Адаптация к коду:

for items in line: 
    breakup= items.split() 
    number, salary, position, first, des1, des2, last = breakup 
    data.append(tuple([last, first + ' ' + des1 + ' ' + des2, number, position, salary])) 

print data 

Результат:

[('John', 'Gregory the 1st', '15674', 'Manager', '24000'), ('John', 'Gregory the 1st', '15674', 'Manager', '24000'), ('John', 'Gregory the 1st', '15674', 'Manager', '24000'), ('John', 'Gregory the 1st', '15674', 'Manager', '24000')] 
+0

Вы также можете использовать понимание списка. –

+0

@Maxime Вы правы, но поскольку это основной вопрос, я подумал, что лучше всего сделать его читаемым и простым решением. –

+0

Благодарим вас за быструю обратную связь. Однако он не работает с моим кодом, который невероятно раздражает, так как способ форматирования информации правильно, но, увы, нет кубиков. – Softey

3

переупорядочение легко достигается, если ваш ввод данных является действительным.

# First, Last, Number, Position, Salary 
data = [(f,l,n,p,s) for n,s,p,l,f in data] 

Это будет работать, только если ваше входное значение является списком списков. Ваш образец недействителен.

Смежные вопросы