Python - Añadir elementos a un diccionario

 
Vista:
sin imagen de perfil
Val: 31
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Añadir elementos a un diccionario

Publicado por Josafat (18 intervenciones) el 27/11/2018 19:21:58
Hola, estoy intentando hacer un diccionario, agregarle nuevos elementos en una posición X, pero al final solo agrega el ultimo elemento y los anteriores no los toma en cuenta
En base de un archivo txt con la siguiente estructura:
url1
[ (p1,2) (p2,3) (p3,4)
]
url2
[ (p1,1) (p3,2) (p4,8)
]
url3
[ (p2,5) (p3,1) (p5,7)
]
Quiero hacer un diccionario donde la pX sea la llave de una lista y dentro tenga la lista con todos los elementos que la contengan:
{p1: ("url1":2), (url2,1)}
Y así con todas las palabras pero el unico resultado que me está dando es:
{'p1': ['url2\n', 1], 'p2': ['url3\n', 5], 'p3': ['url3\n', 1], 'p4': ['url2\n', 8], 'p5': ['url3\n', 7]}
Este es mi código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import io
import string, re
import pickle
file=open("indicenormal.txt")
palabrasg=[]
invertido={}
def indiceinv(palabrasg):
	ind=0
	file2=open("indiceinvertido.txt",'w')
	for palabra in palabrasg:
		str1 = ''.join(palabra)
		if ind==0:
			file2.write(str1+"\n[\n]")
			ind+=1
		else:
			file2.write("\n"+str1+"\n[\n]")
 
urls={}
def bus():
	opalabras={}
	a=0
	b=0
	c=0
	url=""
	inicio=0
	termino=0
	i=0
	coma=0
	palabra=''
	frecuencia=''
	for line in file:
		if line[0]=='u':
			urls[line]=line
			url=line
			print(line)
		else:
			for s in line:
				if s=='(':
					inicio=i
					a=1
				if s==',':
					coma=i
					b=1
				if s==')':
					termino=i
					c=1
				if a==1 and b==1 and c==1:
					palabra=line[inicio:coma].strip('(,)')
					frecuencia=line[coma:termino].strip('(,)')
					if palabra not in palabrasg:
						palabrasg.append(palabra)
					#print(line,inicio,coma,termino)
					#print(palabra,frecuencia)
					frecuencia=int(frecuencia)
					opalabras=[url,frecuencia]
					#opalabras=dict((key,value)for key, value in opalabras.items())
					invertido[palabra]=opalabras
					palabra=''
					frecuencia=''
					a=0
					b=0
					c=0
				i+=1
			i=0
bus()
 
#print (urls)
#print (palabrasg)
print (invertido)
#indiceinv(palabrasg)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.443
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Añadir elementos a un diccionario

Publicado por tincopasan (434 intervenciones) el 28/11/2018 00:39:54
más allá de muchas cosas que la verdad no entiendo porque las haces así te aclaro el concepto, un diccionario no puede tener claves repetidas, por lo tanto esta línea:
1
invertido[palabra]=opalabras
lo que hace es reemplazar la clave vieja por la nueva
una forma de varias sería:
1
2
3
4
5
if palabra not in invertido:
     invertido[palabra]=opalabras
  else:
      valornuevo=invertido.get(palabra)+opalabras
       invertido.update({palabra:valornuevo})

otra cosa, podés guardar como quieras los elemntos del diccionario, ya que los muestra de cualquier forma, no mantiene el orden de añadido,supongo que ya lo sabes, sino hay formas de ordenar la visualización de un diccionario.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar