plotly: TypeError: nu se poate converti elementul secvență de actualizare a dicționarului #0 într-o secvență (Programare, Python, Plotly)

임종훈 a intrebat.

Am o problemă cu proiectul la care lucrez în prezent, așa că las o întrebare.
Conținutul curent este desenat în format tabelar de către senzor. Dar acum câteva zile, când lucram la ceva, nu am știut cum să rezolv, așa că am cerut ajutor.

import plotly.plotly as py
import plotly.figure_factory as ff
from bluepy import sensortag
import sys
import time
import datetime
import numpy as np

py.sign_in("smrlswja9963","94b4enXKYqyOu4iuPDGG")

time.sleep(1.0)

tag = sensortag.SensorTag('24:71:89:CC:53:00')
tag.IRtemperature.enable()
tag.humidity.enable()

stream1=py.Stream('liz9v2c0or')
stream1.open()

i=0     
while True:
    now = datetime.datetime.now()
    dateTime = now.strftime("%Y-%m-%d %H:%M:%S")

    A = tag.IRtemperature.read()
    B = tag.humidity.read()
    tempt=A[0]
    humty=B[0]

    stream1.write({dateTime,tempt,humty})

    i+=1

    tag.waitForNotifications(3.0)     

table = go.Table(
    header=dict(values=["dateTime","tempt","humty"]),
    cells=dict(values=[[dateTime],[tempt],[humty]]),
    stream = dict(token='liz9v2c0or',))

data=[table]
py.iplot(table, filename="latex table")

După ce am executat următorul cod, a apărut următoarea eroare.

Traceback (most recent call last):
  File "/home/pi/do it.py", line 27, in <module>
    stream1.write({dateTime,tempt,humty})
  File "/usr/local/lib/python2.7/dist-packages/plotly/plotly/plotly.py", line 632, in write
    stream_object.update(trace)
TypeError: cannot convert dictionary update sequence element #0 to a sequence

În acest caz, codul prin care desenez graficul cu ajutorul plolty nu are o problemă la primirea datelor din stream, ci atunci când desenez graficul tabelar.

Cum pot să fac un grafic aici?sunt foarte curios. Vă rog să mă anunțați.

1 răspunsuri
abarnert

Această excepție înseamnă că încerci să construiești un dict dintr-un iterabil, iar primul element al acelui iterabil nu este o secvență. Ca documentația explică, puteți construi un dict în două moduri:

  • dintr-o cartografiere, sau
  • dintr-un iterabil de perechi cheie-valoare.

Așadar, dacă încercați să-l construiți, de exemplu, dintr-un set de numere:

>>> dict({1, 2, 3})
TypeError: cannot convert dictionary update sequence element #0 to a sequence

… încearcă să folosească primul element ca o pereche cheie-valoare – adică o secvență de 2 valori – dar nu există nicio modalitate de a interpreta numărul. 1 ca o pereche cheie-valoare, așa că ridică o problemă TypeError.


Între timp, nu știu absolut nimic despre streamingul Plotly, dar ceea ce este pe această pagină, , dar acest cod este în mod clar greșit:

stream1.write({dateTime,tempt,humty})

Nu-mi pot imagina de ce ați dori să transmiteți un set.

În plus, toate exemplele au fie un dict, fie un șir care este o codificare JSON a unui dict.

Deci, în mod evident, API-ul se așteaptă ca tu să îi treci fie un dict, fie ceva ce poți introduce în constructorul dict. Dar tu îi transmiți un set. Așadar, acesta alimentează constructorul dict cu acel set și primește această excepție.

Din moment ce nu am nicio idee despre ceea ce încercați să faceți aici, nu am nicio idee despre ce vreți să faceți. ce dict ar trebui să trimiți aici. Dar cu siguranță ar trebui să transmiteți un dict.


De asemenea, chiar dacă remediați acest lucru, pe baza sign_in apel, se pare că utilizați Plotly Cloud. Dar, după cum se spune pe aceeași pagină:

Streaming-ul nu mai este suportat în Plotly Cloud.

Așadar, dacă încercați să utilizați streaming cu Plotly Cloud, chiar dacă vă reparați codul pentru a avea sens, probabil că va eșua în continuare, doar că va apărea o eroare de la Plotly și nu o eroare de la TypeError despre trecerea de prostii.

Comentarii

  • Așadar, dacă mă uit la o parte din codul de pe pagina Google și am lucrat cu stream pe un nor plat, nu este compatibil cu acel grafic? –  > Por 임종훈.
  • @임종훈 Nu știu ce este „pagina Google”. Și nu știu ce este „un nor plat”. Și nu am spus că nu se acceptă grafice pe cloud, ci că streaming nu este suportat. Așa că… habar n-am cum să răspund la toate astea. –  > Por abarnert.
  • Îmi pare rău că vă tot întreb. În primul rând, am reușit să desenez un grafic drept făcând referire la codul de pe următorul site, iar acum pot să desenez un grafic drept și un tabel în același timp, iar apoi pot folosi html pentru alte site-uri. „smidgeonpigeon.wordpress.com/tag/python” Am desenat un grafic în timp real făcând referire la codul din următorul conținut, iar acum îl voi desena sub forma unui tabel. Cum ar trebui să îl corectez? –  > Por 임종훈.
  • @임종훈 Ei bine, codul din exemplul respectiv transmite un dict de fiecare dată când apelează write. Tu treci un set. Răspunsul meu explică de ce acest lucru face o diferență. Tot nu înțeleg ce încerci să reprezinți grafic aici. Poate că vrei ca dictul {'dateTime': dateTime, 'tempt': tempt, 'humty': humty}, sau poate că vrei altceva. Numai tu știi ce încerci să faci. –  > Por abarnert.
  • Bună, hai să-ți explic ce vreau să fac Deci ce vreau să fac este să obțin datele în timp real și să le desenez sub forma unui tabel pentru a putea tasta codul de care te-am întrebat am pornit cu ideea de cum să pornesc cu această treabă în timp real de la Tinsor tag și să desenez graficul corespunzător. Atunci când atribui inițial munca, pot să fac streaming pentru a desena graficul Dar ceea ce am vrut să fac a fost să importe graficul sub formă de grafic în celălalt web și să importe datele din partea. A început cu un gând. Cum credeți că ar trebui să schimbăm asta? Vă rog să-mi spuneți. Vă rog…  > Por 임종훈.